第六章 塊與大中樞派發(fā)—第42條:多用GCD,少用performSelector系列方法

Objective-C本質(zhì)上是一門非常動(dòng)態(tài)的語言,NSObject定義了幾個(gè)方法,令開發(fā)者可以隨意調(diào)用任何方法。這幾個(gè)方法可以推遲執(zhí)行方法調(diào)用,也可以指定運(yùn)行方法所用的線程。這些功能原來很有用,但是在出現(xiàn)了大中樞派發(fā)及塊這樣的新技術(shù)之后,就顯得不那么必要了,最好是避開它們。
其中最簡(jiǎn)單的是

"performSelector:(SEL)selector"

該方法與直接調(diào)用選擇子等效,所以下面兩行代碼的執(zhí)行效果等效:

[object performSelector:@selector(selectorName)];
[object selectorName];

使用此方式調(diào)用方法,編譯器可能會(huì)發(fā)出如下警示信息:

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

因?yàn)榫幾g器并不知道將要調(diào)用的選擇子是什么,也就不了解其方法簽名及返回值,甚至連是否有返回值都不清楚。而且,由于編譯器不知道方法名,所以就沒辦法運(yùn)用ARC的內(nèi)存管理規(guī)則來判定返回值是不是應(yīng)該釋放。鑒于此,ARC采用了比較謹(jǐn)慎的做法,就是不添加釋放操作。然而這么做可能導(dǎo)致內(nèi)存泄露,因?yàn)榉椒ㄔ诜祷貙?duì)象時(shí)可能已經(jīng)將其保留了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容