【发布时间】: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