2012-05-29 8 views
33

Duplicar posibles:
performSelector may cause a leak because its selector is unknownpara evitar la advertencia de "PerformSelect puede causar una fuga debido a su selector es desconocido"

hice un NSDictionary convertir mi entrada (NSString) al selector . La "hoja de selección" se veía como sigue:

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

Cuando intento para traer uno de estos selector y realizarlo por la siguiente, que causa una advertencia:

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

La advertencia dice: PerformSelector puede causa una fuga porque su selector es desconocido. ¿Hay alguna manera de evitar que esta advertencia ocurra? o hay alguna forma "más segura" de realizar tal acción?

Gracias chicos :)

+2

posible duplicado de [performSelector Puede causar una fuga debido a su selector es desconocida] (http://stackoverflow.com/questions/7017281/ performselector-may-cause-a-leak-because-its-selector-is-unknown) [performSelector: warning] (http://stackoverflow.com/questions/8773226/performselector-warning), [Por qué advertir con performSelector:] (http://stackoverflow.com/questions/10531119/), [¿Cómo evito la advertencia de Clang en performSelector :?] (http://stackoverflow.com/questions/7043999/) –

+0

@JacquesCousteau donde quiera que fi ¿Y el tiempo para obtener todo esto? De todos modos, estás en un rollo con los duplicados, hombre. ¡Seguid así! – CodaFi

+0

@Coda: Acabo de escribir ["\ [objc \] performSelector puede causar una fuga"] (http://stackoverflow.com/search?q=%5Bobjc%5D+performSelector+may+cause+leak) en el cuadro de búsqueda y miré la primera página de resultados, pero aprecio el aprecio. –

Respuesta

127

Sólo tiene que utilizar esto:

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

muchas gracias amigo – harshitgupta

+0

Gracias, esto funcionó perfectamente y tiene sentido completo – migs647

+7

Me di cuenta de que es suficiente utilizar '#pragma clang diagnostic ignored" -Warc-performSelector-leaks "' al comienzo de la implementación de la clase. –

Cuestiones relacionadas