34

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

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

[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は、セレクターが不明なため、リークを引き起こす可能性があります。この警告の発生を防ぐ方法はありますか?または、そのようなアクションを実行するための「より安全な」方法はありますか?

みんなありがとう :)

4

1 に答える 1

129

これを使用してください:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[self performSelector:sel withObject:arguments];
#pragma clang diagnostic pop
于 2012-05-29T11:05:46.487 に答える