【问题标题】:Static objects initialized within class methods in ARC在 ARC 的类方法中初始化的静态对象
【发布时间】:2012-05-24 08:22:40
【问题描述】:

我使用类初始化器来初始化我稍后在代码中使用的一些静态变量。

    __strong static NSCharacterSet* _unwantedChars;

@implementation TMGeocoderModel

+(void)initialize{
    NSMutableCharacterSet *_alnum = [NSMutableCharacterSet characterSetWithCharactersInString:@","];
    [_alnum formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    _unwantedChars = _alnum;
}

-(id)initWithSearchString:(NSString *)searchString{
    self = [super init];
    if(self){
        NSString* temp = [searchString stringByTrimmingCharactersInSet:_unwantedChars];

    }
    return self;
}

当我到达下一行代码时

NSString* temp = [searchString stringByTrimmingCharactersInSet:_unwantedChars];

_unwantedChars 已经发布。 在我切换到 ARC 模式之前一切正常,但在 ARC 中失败并显示以下消息: -[CFCharacterSet characterIsMember:]:消息发送到释放实例0x11247330

有没有办法在类方法中初始化对象,使它们不会被释放?

更新: 好吧,这完全是我的错误,解决方案相当简单。

Build Settings -> Objective-C Automatic Reference Counting中,只有DEBUG配置设置为YES,其他配置设置为没有。

全部更改为“是”,一切正常。

【问题讨论】:

    标签: objective-c static initialization automatic-ref-counting


    【解决方案1】:

    NSMutableCharacterSet *_alnum 的范围仅在您的 intialise 方法中。全局声明。

    【讨论】:

    • 谢谢,@Vignesh。我试过了,没有成功。唯一有帮助的是'_unwantedChars = [_alnum copy];' .但我不确定这是最终的解决方案。
    • 大家好,我遇到了同样的问题,最后我发现解决这个问题的唯一方法是启用 ARC 并相应地转换代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多