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 SettingsWARNING_CFLAGS添加-Wno-arc-performSelector-leaks在这里输入图像说明

在这里find解决scheme

最简单的方法是将此macros添加到您的pch文件。 或.m文件..

 #pragma GCC diagnostic ignored "-Wundeclared-selector"