执行选择器可能会导致泄漏,因为选择未知?

时间:2015-09-29 09:32:51

标签: ios objective-c iphone xcode

我正在使用以下代码&我正在收到警告

elements

代码

Perform selector may cause leak because select is unknown

请告诉我谁能摆脱这个警告?

3 个答案:

答案 0 :(得分:1)

警告是有原因的。您可以在执行之前检查mainImage是否响应选择器。警告不会消失,但更安全。像这样:

 SEL _selector = NSSelectorFromString(@"asdf");
    if([self respondsToSelector:_selector])
        [self performSelector:_selector];

答案 1 :(得分:1)

此警告的原因是,使用ARC时,运行时需要知道如何处理您正在调用的方法的结果。结果可能是任何东西:void,int,char,NSString *,id等.ARC通常从您正在使用的对象类型的标题中获取此信息.3

ARC确实只有4件事要考虑返回值:4

  1. 忽略非对象类型(void,int等)
  2. 保留对象值,然后在不再使用时释放 (标准假设)
  3. 不再使用时释放新对象值(init /中的方法) 复制家庭或归因于ns_returns_retained
  4. 什么都不做假设返回的对象值在本地有效 范围(直到最内层的发布池被耗尽,归因于 ns_returns_autoreleased
  5. This thread详细说明了这一点。

答案 2 :(得分:-1)

你通过摆脱这个糟糕的代码来解决它。对于那些认为这段代码是个好主意的人:不,不是。这是一种聪明而失败的尝试。

您正在将数组的名称存储在数组中,这完全不安全。我建议你分析代码,找到可能存储的选择器,而不是这个可怕的代码,你存储一个块,它将图像作为参数并返回图像而不是选择器,然后调用块。