我的技術博客經常被流氓網站惡意爬取轉載。請移步原文:http://www.companysz.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了。
【原因】
詳細解釋可見爆棧上這個被采納的答案。
暫時沒時間翻譯了,就先貼個鏈接在這兒吧~
新聞熱點
疑難解答