2
我使用類初始化程序來初始化稍後在代碼中使用的一些靜態變量。在ARC的類方法中初始化的靜態對象
__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失敗,出現以下消息: - [CFCharacterSet characterIsMember:]:消息發送到釋放實例0x11247330
有什麼方法來初始化類方法的對象所以他們不會被釋放?
更新: 那麼這完全是我的錯誤,解決方案非常簡單。
在生成設置 - >Objective-C的自動引用計數,只有DEBUG配置被設置爲YES,而其它構造設定爲NO。
更改全部爲YES,並且一切正常。
謝謝@Vignesh。我嘗試過,沒有成功。唯一有用的是'_unwantedChars = [_alnum copy];' 。但我不確定這是最終的解決方案。 –
大家好,我得到了同樣的問題,最後我發現解決這個問題的唯一方法是啓用ARC並相應地轉換代碼。 –