在ARC中的类方法中初始化静态对象

时间:2012-05-24 08:22:40

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

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

    __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

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

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

构建设置 - > Objective-C自动引用计数,仅 DEBUG 配置设置为YES,而其他配置设置为NO。

将全部更改为YES,一切正常。

1 个答案:

答案 0 :(得分:0)

NSMutableCharacterSet *_alnum的范围仅适用于您的初始化方法。全局声明它。