2012-05-29 15 views
33

Eventuali duplicati:
performSelector may cause a leak because its selector is unknownper impedire avvertimento da "PerformSelect può causare una perdita perché il suo selettore è sconosciuto"

ho fatto un NSDictionary per convertire il mio ingresso (NSString) al selettore . La "mappa di selezione" è guardato come segue:

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

Quando provo a prendere uno di questi selettore ed eseguirla dal seguente, esso provoca un avvertimento:

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

L'avvertimento dice: performSelector maggio causare una perdita perché il suo selettore è sconosciuto. C'è un modo per impedire che questo avviso si verifichi? o esiste un modo "più sicuro" per eseguire un'azione del genere?

Grazie ragazzi :)

+2

possibile duplicato del [performSelector può causare una perdita perché il suo selettore è sconosciuta] (http://stackoverflow.com/questions/7017281/ performselector-may-causa-a-leak-perché-its-selector-is-unknown) [performSelector: warning] (http://stackoverflow.com/questions/8773226/performselector-warning), [Perché avvertire con performSelector:] (http://stackoverflow.com/questions/10531119/), [Come impedire l'avviso di Clang su performSelector :?] (http://stackoverflow.com/questions/7043999/) –

+0

@JacquesCousteau, ovunque tu sia e il tempo di ottenere tutto questo? Ad ogni modo, stai facendo un giro con i duplicati, amico. Continuate così! – CodaFi

+0

@Coda: ho appena digitato ["\ [objc \] performSelector può causare perdite"] (http://stackoverflow.com/search?q=%5Bobjc%5D+performSelector+may+cause+leak) nella casella di ricerca e guardò la prima pagina dei risultati, ma apprezzo l'apprezzamento. –

risposta

127

Basta usare questo:

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

grazie mille amico – harshitgupta

+0

Grazie, ha funzionato perfettamente e ha perfettamente senso – migs647

+7

Ho capito che è sufficiente usare '#pragma clang diagnostic ignorato" -Warc-performSelector-leaks "' all'inizio dell'implementazione della classe. –

Problemi correlati