《Effective Objective-C 2.0》讀後總結 之四

來源:互聯網
上載者:User

標籤: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》讀後總結 之四

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.