PerformSelectormaycausealeakbecauseitsselectorisunknown解决方法

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

我的技术博客经常被流氓网站恶意爬取转载。请移步原文: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了。

【原因】

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

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

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航