2012-05-29 7 views
33

Mögliche Duplizieren:
performSelector may cause a leak because its selector is unknownverhindern Warnung von „Perform kann ein Leck verursachen, weil seine Wähler unbekannt ist“

habe ich eine NSDictionary meinen Input (NSString) zu konvertieren zum Wähler . Die „Selektor Karte“ sah sich wie folgt:

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

Wenn ich versuche, einen dieser Wähler zu holen und führen es durch folgt, ist es eine Warnung verursachen:

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

Die Warnung sagt: perform kann ein Leck verursachen, weil sein Selektor unbekannt ist. Gibt es eine Möglichkeit, diese Warnung zu vermeiden? Oder gibt es einen "sichereren" Weg, eine solche Aktion durchzuführen?

Danke Jungs :)

+2

möglich Duplikat [perform ein Leck verursachen kann, weil seine Wähler unbekannt ist] (http://stackoverflow.com/questions/7017281/ performselector-cause-a-leak-weil-es-selector-is-unknown) [performSelector: warning] (http://stackoverflow.com/questions/8773226/performselector-warning), [Warum warnen mit performSelector:] (http://stackoverflow.com/questions/10531119/), [Wie verhindere ich Clangs Warnung auf performSelector:?] (http://stackoverflow.com/questions/7043999/) –

+0

@JacquesCousteau, wo immer Sie fi nd die Zeit, all diese zu bekommen? Wie auch immer, du bist mit den Duplikaten an der Reihe, Mann. Mach weiter! – CodaFi

+0

@Coda: Ich habe gerade ["\ [objc \] performSelector kann Leck verursachen"] (http://stackoverflow.com/search?q=%5Bobjc%5D+performSelector+may+cause+leak) in das Suchfeld und schaute auf die erste Seite der Ergebnisse, aber ich schätze die Wertschätzung. –

Antwort

127

Nur diese verwenden:

#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Warc-performSelector-leaks" 
[self performSelector:sel withObject:arguments]; 
#pragma clang diagnostic pop 
+0

Vielen Dank Kumpel – harshitgupta

+0

Danke, das hat perfekt funktioniert und macht Sinn – migs647

+7

Ich fand heraus, dass es genug ist, '#pragma clang diagnostic ignored" -Warc-performSelector-leaks "' zu Beginn der Klassenimplementierung zu verwenden. –

Verwandte Themen