warning:performSelector may cause a leak because its selector is unknown

转载:http://blog.sina.com.cn/s/blog_7dc11a2e0101gsk0.html

在ARC项目中使用 performSelector: withObject: 函数出现“performSelector may cause a leak because its selector is unknown”。在stackoverflow找到了一个解决方案,地址:http://stackoverflow.com/questions/7017281/performselector-may-cause-a-leak-because-its-selector-is-unknown。

主要是警告信息,在非ARC项目中没有这个警告。如果是在某一处修改只需要加入下列代码:

 

<code style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu sans Mono', 'Bitstream Vera sans Mono', 'Courier new', monospace, serif;"><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: gray;">#pragma</span><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"> clang diagnostic push
</span><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: gray;">#pragma</span><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"> clang diagnostic ignored </span><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(128, 0, 0);">"-Warc-performSelector-leaks"</span><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">
    </span><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">[</span><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">self</span><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">.</span><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">ticketTarget performSelector</span><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">:</span><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"> self</span><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">.</span><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">ticketAction withObject</span><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">:</span><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"> self</span><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">];//此处是你调用函数的地方</span><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">
</span><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: gray;">#pragma</span><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"> clang diagnostic pop</span></code>
<code style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu sans Mono', 'Bitstream Vera sans Mono', 'Courier new', monospace, serif;"><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"></span></code><pre name="code" style="white-space: pre-wrap; color: rgb(50, 62, 50); font-size: 14px; word-wrap: break-word; background-color: rgb(255, 255, 255); margin-top: 0px; margin-bottom: 10px; padding: 5px; border: 0px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu sans Mono', 'Bitstream Vera sans Mono', 'Courier new', monospace, serif; overflow: auto; width: auto; max-height: 600px; line-height: 18px;"><code style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu sans Mono', 'Bitstream Vera sans Mono', 'Courier new', monospace, serif;"><span style="word-wrap: normal; word-break: normal; line-height: 21px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">如果在程序中多处使用,可以写一个宏定义,如下:</span></code>
<code style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu sans Mono', 'Bitstream Vera sans Mono', 'Courier new', monospace, serif;"><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: gray;">#define</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"> </span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(43, 145, 175);">SuppressPerformSelectorL<wbr>eakWarning</wbr></span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">(</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(43, 145, 175);">Stuff</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">)</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"> \
    </span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(0, 0, 139);">do</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"> </span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">{</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"> \
        </span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(43, 145, 175);">_Pragma</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">(</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(128, 0, 0);">"clang diagnostic push"</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">)</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"> \
        </span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(43, 145, 175);">_Pragma</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">(</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(128, 0, 0);">"clang diagnostic ignored "-Warc-performSelector-leaks""</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">)</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"> \
        </span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(43, 145, 175);">Stuff</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">;</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"> \
        </span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(43, 145, 175);">_Pragma</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">(</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(128, 0, 0);">"clang diagnostic pop"</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">)</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"> \
    </span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">}</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"> </span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(0, 0, 139);">while</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"> </span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">(</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(128, 0, 0);">0</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">)</span></code>
 
如果没有返回结果,可以直接按如下方式调用:
</pre><pre name="code" style="white-space: pre-wrap; color: rgb(50, 62, 50); font-size: 14px; line-height: 21px; background-color: rgb(85, 115, 79); word-wrap: break-word; margin-top: 0px; margin-bottom: 10px; padding: 5px; border: 0px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu sans Mono', 'Bitstream Vera sans Mono', 'Courier new', monospace, serif; overflow: auto; width: auto; max-height: 600px;"><code style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu sans Mono', 'Bitstream Vera sans Mono', 'Courier new', monospace, serif;"><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(43, 145, 175);">SuppressPerformSelectorL<wbr>eakWarning</wbr></span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">(</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">
    </span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">[</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">_target performSelector</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">:</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">_action withObject</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">:</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">self</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">]</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">
</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">);</span></code>
<pre style="white-space: normal; color: rgb(50, 62, 50); font-size: 14px; line-height: 21px; background-color: rgb(85, 115, 79);">如果要返回结果,可以按如下方式调用:
<code style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu sans Mono', 'Bitstream Vera sans Mono', 'Courier new', monospace, serif;"><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">id result</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">;</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">
</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(43, 145, 175);">SuppressPerformSelectorL<wbr>eakWarning</wbr></span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">(</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">
    result </span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">=</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"> </span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">[</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">_target performSelector</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">:</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">_action withObject</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">:</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">self</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">]</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">
</span><span style="word-wrap: normal; word-break: normal; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">);</span></code>


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值