クラス初期化子を使用して、後でコードで使用するいくつかの静的変数を初期化します。
__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に変更し、すべてが機能しています。