ios - 执行选择器警告

标签 ios objective-c compiler-warnings performselector

我收到警告

PerformSelector may cause a leak because its selector is unknown

在代码中:

- (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> {

//
}

最佳答案

您的 if ... respondsToSelector: selector 将不起作用,因为您的 selector 只是方法的名称。对于您的情况,您需要检查

if ([delegate respondsToSelector: @selector(method::)]

另一种情况仅适用于方法:

无论如何,你可以像这样抑制警告:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
    [self performSelector:nextView];
#pragma clang diagnostic pop

关于ios - 执行选择器警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8773226/

相关文章:

iOS:如果我的仅限 iPad 的应用程序是使用 armv6 构建的,它会被 AppStore 拒绝吗?

objective-c - 将排序描述符应用于从模板创建的 NSFetchRequest

objective-c - OS X 在后台打开 URL 方案

c - 为什么 GCC 警告不要进行这种隐式转换?

c - 使用编译器警告捕获常量1的左移溢出?

html - 更改 ios 上多选输入的默认文本

objective-c - 如何设置一个按钮来反转两个文本字段

iOS 应用内购买内容集成

objective-c - 如何通过cocoa应用程序从USB GPS设备读取NMEA数据

ios - Xcode 7 : Warnings when API version is higher than target version?