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がリークを引き起こす可能性があります。この警告が発生しないようにする方法はありますか?または、そのようなアクションを実行するための「より安全な」方法はありますか?
みんなありがとう :)
これを使うだけです:
#pragma clang diagnostic Push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[self performSelector:sel withObject:arguments];
#pragma clang diagnostic pop