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

    【原因】

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

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

  • 相关阅读:
    快速排序
    fedora 配置
    while与do while
    switch选择结构
    if选择结构
    java有参
    java猜拳
    java类的无参方法
    java类与对象
    java数组
  • 原文地址:https://www.cnblogs.com/hamhog/p/3801030.html
Copyright © 2011-2022 走看看