標籤:exec iap 決定 安全 監控 pst group stat 安全執行緒
寫在前面的話:
1、從現在,這一刻,開始努力,動起來!
2、《Effective Objective-C 2.0》這是一本非常實在的書,各個章節用具體的例子告知讀者如此這般的緣由!
3、書已經買了很久,也隔三差五的看一下,本次是按照本書章節,總結本書內容以及自己的體會!
4、願共勉之!
第37條:理解“塊”這一概念
37.1:塊是C、C++、Objectivve-C中的文法閉包;
37.2:塊可以接受參數,也可以傳回值;
37.3:塊可以分配在棧或堆上,也可以是全域的。分配在棧上的塊可拷貝到堆裡,這樣的話,就和標準deObjective-C對象一樣,具備引用計數了!
第38條:為常用的塊類型建立typedef
38.1:以typedef重新定義塊類型,可另塊變數用起來更加簡單;
38.2:定義新類型時應遵從現有的命名習慣,勿使其名稱與別的類型相衝突;
38.3:不妨為同一個塊簽名定義多個類型別名。如果要重構的代碼使用了塊類型的某個別名,那麼只需要修改響應typedef中的塊簽名即可,無須改動其他rypedef。
第39條:用handler塊降低代碼分散程度
39.1:在建立對象時,可以使用內聯的handler塊將相關商務邏輯一併聲明;
39.1:在有多個執行個體對象需要監控時,如果採用委託模式,那麼經常需要根據傳入的對象來切換,而若改用handler塊來實現,則可直接將塊與相關對象放在一起;
39.2:涉及API時如果用到handler塊,那麼可以增加一個參數,使調用者可通過此參數來決定應該把塊安排在哪個隊列上執行。
第40條:用區塊引述其所屬對象時不要出現保留環
40.1:如果塊所捕獲的對象直接或間接地保留了塊本身,那麼就得當心保留還的問題;
40.2:一定要找個適當的時機解除保留環,而不能把責任推給API的的調用者。
第41條:多用派發隊列,少用同步鎖
41.1:派發隊列可用來表述同步語義(synchronization semantic),這種做法要比使用@sychornized塊或NSLock對象簡單;
41.2:將同步與非同步派髮結合起來,可以實現與普通加鎖機制一樣的同步行為,而這麼做卻不會阻塞執行非同步派發的線程;
41.3:使用同步隊列及柵欄塊,可以令同步行為更高效!
第42條:多用GCD,少用performSelector系列方法
42.1:performSelector系列方法在記憶體管理方面容易有疏失。它無法確定將要執行的選擇子具體是什麼,因而ARC編譯器也就無法插入使用的記憶體管理方法;
42.2:performSelector系列方法所能處理的選擇子太過局限了,選擇子的傳回值類型以及發給方法的參數個數都收到限制;
42.3:如果想把任務放在另一個線程上執行,那麼最好不要用performSelector系列方法,而是應該把任務封裝到塊裡,然後調用大中樞派發機制的相關方法來實現。
第43條:掌握GCD及操作隊列的使用時機
43.1:在解決多線程和任務管理問題時,派發隊列並非唯一解決方案;
43.2:操作隊列提供了一套高層的Objective-C API,能實現純GCD所具備的絕大部分功能,而且還能完成一些更為複雜的操作,那些操作若改用GCD來實現,則需另外編寫代碼!
第44條:通過Dispatch Group機制,根據系統資源狀況來執行任務
44.1:一系列任務可歸入一個dispatch group之中。開發人員可以在這組任務執行完畢時獲得通知。
44.2:通過disaptch group,可以在並髮式派發隊列裡同時執行多項任務。此時GCD會根據系統資源狀況來調度這些並發執行的任務。開發人員若自己來實現此功能,則需編寫大量代碼!
第45條:使用dispatc_once來執行秩序運行一次的安全執行緒代碼
45.1:經常需要編寫“只需執行一次的安全執行緒代碼”(thread-safe single-code execution)。通過GCD所提供的diapstch_once函數,很容易就能實現此功能;
45.2:標記應該聲明在static或gloabal範圍中,這樣的話,在把只需執行一次的塊傳給dispatch_once函數時,傳進去的標記也是相同的。
第46條:不要使用dispatch_get_current_queue
46.1:dispatch_get_current_queue函數的行為常常與開發人員所預期的不同。此函數已經廢棄,只能做調試之用。
46.2:由於派發隊列是按照層級來組織的,所以無法單用某個隊列對象來描述“當前隊列”這一概念。
46.3:dispatch_get_current_queue函數用於解決由不可重新進入的代碼所引發的死結,然而能用此函數解決的問題,通常也能改用“隊列特定資料”來解決!
本章主要是塊和大中樞派發,可以說是目前OC變成的基礎和核心!這部分相關的執行個體使用在項目開發中進一步完善和提升!!!
寫在結尾處的話:每天努力一點點,也許不明顯,但終究會有所協助!
非常汗顏,整個九月份沒有更新!願繼續努力!
《Effective Objective-C 2.0》讀後總結 之四