三十七、理解塊這一概念
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。