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,並且一切正常。

回答

0

NSMutableCharacterSet *_alnum的範圍只在您的初始方法中。在全球範圍內宣佈。

+2

謝謝@Vignesh。我嘗試過,沒有成功。唯一有用的是'_unwantedChars = [_alnum copy];' 。但我不確定這是最終的解決方案。 –

+0

大家好,我得到了同樣的問題,最後我發現解決這個問題的唯一方法是啓用ARC並相應地轉換代碼。 –