performSelector系列方法编译器警告-Warc-performSelector-leaks

更新:如果selector是属性的get方法,而且是在运行时才确定的话,比较好的作法应该是使用KVC来获取,最近我正在看KVC的官方文档,之后会把学习笔记发布出来


如果selector是在运行时才确定的,performSelector时,若先把selector保存起来,等到某事件发生后再调用,相当于在动态绑定之上再使用动态绑定,不过这是编译器不知道要执行的selector是什么,因为这必须到了运行时才能欧确定,使用这种特性的代价是,如果在ARC下编译代码,编译器会发生如下的警告:

 warning:performSelector may cause a leak because its selector is unknown [-Warc-performSelector-leak]

原因是:编译器不知道执行的selector是什么,因此也就不了解其方法签名及其返回值,甚至连是否有返回值都不清楚,由于编译器不知道方法名,也就没有办法运用ARC的内存管理规则来判定返回值是不是应该释放。所以ARC采用了一种比较谨慎的方法,就是不添加释放操作,然而这么做有可能导致内存泄漏,因为方法在返回对象时可能已经将其保留了。

如果你确定不会发生内存泄漏的情况下,可以使用如下的语句来忽略掉这条警告

#pragma clang diagnostic ignored "-Warc-performSelector-leaks"

类推:(忽略Xcode Clang编译器警告)

    当你确定编译器的警告对你来说没有什么用处的时候,为了避免心烦,你可以使用#pragma clang diagnostic ignored “xxx” 这样的语句来忽略掉相应的警告
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值