performSelector引起的警告解决办法
来源:互联网 发布:ubuntu如何安装win10 编辑:程序博客网 时间:2024/05/17 08:48
在写项目的时候,两个动作,同样的操作,但是传递不同的消息,就想到了[target performSelector:sell withObject:nil],写完后发现很正常,但是有个警告,本能的就觉得不舒服,仔细一看:performSelector may cause a leak because itsselector is unknown。
既然编译报警告,我们就不能不管。引起这个警告的原因是什么呢?
我们在调用这些方法的时候有可能返回的是void 或者其他 non-Objects,我们可以忽略这个警告,但是不建议这么做。我们知道oc的内存管理机制,有retain必然有release。在arc模式下,这些都由编译器帮我们做了。但是,假如我们的方法返回的是non-Objects(当然,包括void),这时retain或者release,我们的程序就有可能crash掉。
既然知道了原因,那么解决办法呢?
我们有两种解决办法
第一种:
#pragma clang diagnostic push#pragma clang diagnostic ignored "-Warc-performSelector-leaks" [target performSelector: sel withObject: nil];#pragma clang diagnostic pop也可以定义一个宏
#define SuppressPerformSelectorLeakWarning(Stuff) \do { \_Pragma("clang diagnostic push") \_Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \Stuff; \_Pragma("clang diagnostic pop") \} while (0)
SuppressPerformSelectorLeakWarning( [target performSelector:sel withObject:nil]);
这样使用起来更方便,但是这种方法并没有真正消除这个警告
第二种解决办法:
SEL selector = NSSelectorFromString(@"someMethod");IMP imp = [_controller methodForSelector:selector];void (*func)(id, SEL) = (void *)imp;func(_controller, selector);还有另一种写法,不过读起来费力
SEL selector = NSSelectorFromString(@"someMethod");((void (*)(id, SEL))[target methodForSelector:selector])(target, selector);
到此,这个警告算是完全消除了。
更加详细请移步:http://stackoverflow.com/questions/7017281/performselector-may-cause-a-leak-because-its-selector-is-unknown
0 0
- performSelector引起的警告解决办法
- 消除performSelector:警告的方法
- 去除performSelector的leak警告
- 去掉xcode 4.2里的performselector警告
- 忽略performSelector在ARC下的警告
- 去掉serialVersionUID引起的警告
- 忽略performSelector警告
- 忽略performSelector警告
- 那些由NSTimer 和performSelector 可能引起的内存泄漏
- log4j警告的解决办法
- iOS开发--"performSelector may cause a leak because its selector is unknown"警告原因及其解决办法
- "performSelector may cause a leak because its selector is unknown"警告原因及其解决办法
- ios之"performSelector may cause a leak because its selector is unknown"警告原因及其解决办法
- iOS 之"performSelector may cause a leak because its selector is unknown"警告原因及其解决办法
- ios之"performSelector may cause a leak because its selector is unknown"警告原因及其解决办法
- iOS开发-"performSelector may cause a leak because its selector is unknown"警告原因及其解决办法
- ios之"performSelector may cause a leak because its selector is unknown"警告原因及其解决办法
- "performSelector may cause a leak because its selector is unknown"警告原因及其解决办法
- P122.28.字符串大小写呼唤
- hdu 2822 Dogs
- luabind编译报错 错误: 标识符“(”前缺少二元运算符
- Jenkins+Ant+Android+Robitium 实例详解(打包app,执行Robotium测试,生成测试结果)
- Java复习第二天和第三天
- performSelector引起的警告解决办法
- Socket编程InputStream中的read()方法的问题!!!
- fastboot 烧入 img---fastboot配置(解决fastboot no permissions 错误)
- 预处理,编译, 优化, 汇编, 链接
- 腾讯2015实习生面试(已拿到offer)
- 让安卓手机显示彝文
- Camera 图像处理原理分析- 色彩篇 一
- 查找无序数中最大k个数
- ABAP程序编写过程中怎么提高程序执行效率二