美文网首页
Selector---warning:performSelect

Selector---warning:performSelect

作者: afyylong | 来源:发表于2016-11-12 16:37 被阅读86次

    最近学习高人的代码,突然发现了一种delegate很屌的写法(第一次见到,感觉略屌...)请看:

    声明
    @property (nonatomic, assign) id delegate;
    @property(nonatomic, assign) SEL Click;
    
    实现
    if (_delegate && _Click) {
            [_delegate performSelector:_Click withObject:btn.titleLabel.text];
        }
    
    遵守协议实现协议方法
    secondViewController *vc = [[secondViewController alloc] init];
     vc.delegate = self;
     vc.Click = @selector(onclick:);
    
    协议方法
    - (void)onclick:(NSString *)str {
        NSLog(@"%@",str);
    }
    

    是不是和以前不同呢?是不是屌屌的样子?
    代码写完后你会发现


    ⚠️ 2016-11-12 下午4.18.49.png

    黄色的警告!!! 身为程序狗,怎么能看到这样的事情发生呢?
    于是开始找资料,终于在stackoverflow找到了一个解决方案,地址:http://stackoverflow.com/questions/7017281/performselector-may-cause-a-leak-because-its-selector-is-unknown
    在ARC项目中使用 performSelector: withObject: 函数出现“performSelector may cause a leak because its selector is unknown”。主要是警告信息,在非ARC项目中没有这个警告。
    我才不管什么arc什么mrc呢 我要的是如何去掉黄色的家伙!

    如果是在某一处修改只需要加入下列代码
    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
            [_delegate performSelector:_Click withObject:btn.titleLabel.text];
    #pragma clang diagnostic pop
    
    如果多出出现次警告,可以定义一个宏:
    #define SuppressPerformSelectorLeakWarning(Stuff) \
        do { \
            _Pragma("clang diagnostic push") \
            _Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \
            Stuff; \
            _Pragma("clang diagnostic pop") \
        } while (0)
    

    使用方法如下:

    • 如果没有返回结果,可以直接按如下方式调用:
    SuppressPerformSelectorLeakWarning(
        [_delegate performSelector:_Click withObject:btn.titleLabel.text];
    );
    
    • 如果要返回结果,可以按如下方式调用:
    id result;
    SuppressPerformSelectorLeakWarning(
        result =[_delegate performSelector:_Click withObject:btn.titleLabel.text];
    );
    

    相关文章

      网友评论

          本文标题:Selector---warning:performSelect

          本文链接:https://www.haomeiwen.com/subject/eqeqpttx.html