Effective Objective-C 2.0筆記(六)Block&GCD

三十七、理解塊這一概念

1、returnType (^blockName) (parameters)

2、在聲明block的范圍里,所有變量都可以為其所捕獲,而被其捕獲的變量不可以在block里修改

3、如果block所捕獲的變量是對(duì)象類(lèi)型會(huì)自動(dòng)保留

4、如果block通過(guò)讀取或?qū)懭氩僮鞑东@了實(shí)例變量,那么也會(huì)自動(dòng)把self變量捕獲

5、block在捕獲self時(shí)會(huì)將其保留,如果self所指對(duì)象也保留了block,則產(chǎn)生保留環(huán)

三十八、為常用的塊類(lèi)型創(chuàng)建typedef

三十九、用handler塊降低代碼分散程度

1、建議使用同一個(gè)塊處理成功和失敗情況。

四十、用塊引用其所屬對(duì)象時(shí)不要出現(xiàn)保留環(huán)

四十一、多用派發(fā)隊(duì)列,少用同步鎖

1、@synchronized(self){}會(huì)自動(dòng)創(chuàng)建鎖,等待塊中的代碼執(zhí)行完畢再釋放鎖。

2、使用派發(fā)隊(duì)列比@synchronized或NSLock更簡(jiǎn)單高效

3、執(zhí)行異步派發(fā)時(shí),需要拷貝塊

4、在隊(duì)列中,柵欄塊必須單獨(dú)執(zhí)行,不能與其他塊并行

5、使用同步隊(duì)列及柵欄塊,可以令同步行為更高效

四十二、多用GCD,少用performSelector系列方法

1、performSelector系列方法在內(nèi)存管理方便容易出錯(cuò),ARC編譯器很難插入適當(dāng)?shù)膬?nèi)存管理方法。

四十三、掌握GCD及操作隊(duì)列的使用時(shí)機(jī)

四十四、通過(guò)Dispatch Group機(jī)制,根據(jù)系統(tǒng)資源狀況來(lái)執(zhí)行任務(wù)

四十五、使用dispatch_once來(lái)執(zhí)行只需運(yùn)行一次的線(xiàn)程安全代碼

1、單例模式(singleton)常見(jiàn)實(shí)現(xiàn)方式sharedInstance中為保證線(xiàn)程安全,需添加同步鎖,可以選擇使用dispatch_once。

四十六、不要使用dispatch_get_current_queue

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容