2

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

    __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:]: message sent to deallocated instance 0x11247330

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

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

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

全部改为YES,一切正常。

4

1 回答 1

0

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

于 2012-05-24T08:27:11.800 回答