PerformSelector警告
我收到一个警告
PerformSelector可能会导致泄漏,因为它的select器是未知的
在代码中:
- (void) callDelegate: (SEL) selector withArg: (id) arg error: (NSError*) err { assert([NSThread isMainThread]); if([delegate respondsToSelector: selector]) { if(arg != NULL) { //this line the warning [delegate performSelector: selector withObject: arg withObject: err]; } else { //this line the warning [delegate performSelector: selector withObject: err]; } } else { NSLog(@"Missed Method"); } }
标题:
@interface Topscore : UIViewController <NSObject> { // }
这是由编译器生成的警告,因为在编译时使用了Wundeclaredselect器,并且启用了自动引用计数(ARC)。 这通常可以被安全地忽略,因为显然在编译时名为“selector”的variables中的select器是未知的,因为它将在运行时赋值。
您的if ... respondsToSelector: selector
不起作用,因为您的selector
只是方法的名称。 对于你的情况,你需要检查
if ([delegate respondsToSelector: @selector(method::)]
另一种情况只是为了method:
。
无论如何,你可以禁止这样的警告:
#pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-performSelector-leaks" [self performSelector:nextView]; #pragma clang diagnostic pop
您也可以使用objc_msgSend而不是performSelector,如此处所述。
您可以在“ Build Settings
为WARNING_CFLAGS
添加-Wno-arc-performSelector-leaks 。
在这里find解决scheme
最简单的方法是将此macros添加到您的pch文件。 或.m文件..
#pragma GCC diagnostic ignored "-Wundeclared-selector"