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了。

    【原因】

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

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

  • 相关阅读:
    中国一些web service收藏
    DataSet 和 List<T> 相互 转换
    JS图表
    IIS DirectoryEntry
    JS弹框
    Remoting
    Del SVN Configuare File BAT
    Viewport3D对象转换成图片
    在WPF中进行碰撞检测
    Button自定义样式
  • 原文地址:https://www.cnblogs.com/hamhog/p/3801030.html
Copyright © 2011-2022 走看看