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、initialise メソッド内のみです。グローバルに宣言します。

于 2012-05-24T08:27:11.800 に答える