zoukankan      html  css  js  c++  java
  • PerformSelector may cause a leak because its selector is unknown 解决方法

    我的技术博客经常被流氓网站恶意爬取转载。请移步原文:http://www.cnblogs.com/hamhog/p/3801030.html,享受整齐的排版、有效的链接、正确的代码缩进、更好的阅读体验。

    在Objective-C中需要以函数名或者函数指针来调用函数时,以回调函数为例,对象为(id)target,它的成员函数名为callback,之前习惯是这么写的:

    if ([target respondsToSelector:callback]){
        [target performSelector:callback withObject:nil];
    }

    但是在ARC下会报一个warning: PerformSelector may cause a leak because its selector is unknown

    在网上查,很多人说的方法都是定义宏去ignore warning之类的。总感觉很不爽。今天查到了正确的解决方法:

    【解决方法】

    if ([target respondsToSelector:callback]){
    //    [target performSelector:callback withObject:nil];
        IMP imp = [target methodForSelector:callback];
        void (*func)(id, SEL) = (void *)imp;
        func(target, callback);
    }

    这样就不会报warning了。

    【原因】

    详细解释可见爆栈上这个被采纳的答案

    暂时没时间翻译了,就先贴个链接在这儿吧~

  • 相关阅读:
    ubuntu常用快捷键,不断更新中~
    C语言模拟漏斗
    浅谈webCam
    1001. A+B Format
    点、边、面——欧拉公式
    果园里的树
    生产计划
    Stanford Machine Learning 学习 2016/7/4
    paper reading
    paper reading in this week
  • 原文地址:https://www.cnblogs.com/hamhog/p/3801030.html
Copyright © 2011-2022 走看看