PerformSelector may cause a leak because its selector is unknown 解决方法
2024-08-29 17:51:24
我的技术博客经常被流氓网站恶意爬取转载。请移步原文: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了。
【原因】
详细解释可见爆栈上这个被采纳的答案。
暂时没时间翻译了,就先贴个链接在这儿吧~
最新文章
- GPRS GPRS(General Packet Radio Service)是通用分组无线服务技术的简称,它是GSM移动电话用户可用的一种移动数据业务,属于第二代移动通信中的数据传输技术
- ubuntu -LDAP的配置
- Hadoop RPC源码阅读-客户端
- Fedora 21 安装VirtualBox
- 配置WampServer以及搭建WordPress的一些问题,持续总结。
- 如何通过织云 Lite 愉快地玩转 TSW
- 基于Nginx进行地图瓦片缓存的方案描述
- 虚拟机下Ubuntu扩容及磁盘重新分区-Gparted
- 如果测试UI
- jquery hover事件只触发一次动画
- 2019-03-15-day011-递归生成器
- Java多线程1:进程和线程的区别
- JavaScript三种方式改变标签css
- Ansible 从MySQL数据库添加或删除用户
- java学习-GET方式抓取网页(UrlConnection和HttpClient)
- jQuery+zTree
- js权威指南学习笔记(二)表达式与运算符
- (疯狂java)第一课
- JS给TR隔行换色,鼠标经过有动感
- HttpClient发送Json数据到指定接口
热门文章
- Python Generators(生成器)--yield
- mysql导入数据库
- php运行步骤解析
- [Qt5] 减少dll依赖和大小(特别是webkit的大小和依赖)
- ASP.NET 之 检测到在集成的托管管道模式下不适用的ASP.NET设置
- Linux vsftpd 无法登录 cannot change directory:xxx priv_sock_get_cmd 问题
- 基本Linux命令总结
- ES各种错误解决
- [改善Java代码]小心switch带来的空值异常
- 关于JDK中的设计模式