web-dev-qa-db-ja.com

「セレクターが不明なため、PerformSelectがリークを引き起こす可能性がある」という警告を防ぐため

重複の可能性:
セレクターが不明であるため、performSelectorはリークを引き起こす可能性があります

NSDictionaryを実行して、入力(NSString)をセレクターに変換しました。 「セレクターマップ」は次のようになります。

[self setCmdSelectorMap:[NSDictionary dictionaryWithObjectsAndKeys: 
                         [NSValue valueWithPointer:@selector(doOpenBrowserByString:)], @"openBrowser",
                         [NSValue valueWithPointer:@selector(syncData:)], @"sync",
                         [NSValue valueWithPointer:@selector(getCachedString:)], @"getCachedString",
                         nil]];

これらのセレクターの1つをフェッチして次のように実行しようとすると、警告が表示されます。

sel = [[_cmdMap objectForKey:command] pointerValue];
NSLog(@"selector determined : %@", NSStringFromSelector(sel));
[self performSelector:sel withObject:arguments];

警告は次のとおりです。セレクタが不明であるため、PerformSelectorがリークを引き起こす可能性があります。この警告が発生しないようにする方法はありますか?または、そのようなアクションを実行するための「より安全な」方法はありますか?

みんなありがとう :)

34
Rayer

これを使うだけです:

#pragma clang diagnostic Push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[self performSelector:sel withObject:arguments];
#pragma clang diagnostic pop
128