《Effective Objective-C 2.0 編寫高質量iOS與OS X代碼的52個有效方法》筆記

 

這本書很早有了解過,評價都不錯,但最近才終於把這本書看完,整本書介紹了不少個提升Objective-C的方法,都是平時用得不少可是沒有注意使用的,下面對這些方法作一些小總結。編程

第1章 熟悉Objective-C緩存

第1條:瞭解Objective-C語言的起源安全

Objective-C爲C語言添加了面向對象特性,是其超集。Objective-C使用動態綁定的消息結構,運行時才決定執行何種代碼框架

第2條:在類的頭文件中儘可能少引入其餘頭文件異步

減小頭文件的引入,多使用聲明說起別的類spa

第3條:多用字面量語法,少用與之等價的方法線程

第4條:多用類型常量,少用#define預處理指令設計

在頭文件中使用extern來聲明全局變量,並在相關實現文件中定義其值調試

第5條:用枚舉表示狀態、選項、狀態碼orm

應該用枚舉來表示狀態機的狀態、傳遞給方法的選項以及狀態碼等值,代碼中少用基本數據類型表示狀態選項等

第2章 對象、消息、運行期

第6條:理解"屬性"這一律念

多用屬性來定義對象中的數據變量,屬性: 變量 + 方法 + 屬性特質

第7條:在對象內部儘可能直接訪問實例變量

在dealloc方法中,老是應該直接經過實例變量來讀寫數據。

第8條:理解"對象等同性"這一律念

對象判斷可使用哈希碼判斷

第9條:以"類族模式"隱藏實現細節

類族模式編寫公共接口

第10條:在既有類中使用關聯對象存放自定義數據

類別里加屬性

第11條:理解objc_msgSend的做用

動態消息派發系統

第12條:理解消息轉發機制

標準消息轉發: runtime發送 methodSignatureForSelector:, 消息獲取Selector對應的方法簽名. 返回值非空則經過forwardInvocation: 轉發消息,返回值爲空則向當前對象發送doesNotRecognizeSelector: 程序崩潰退出

第13條:用"方法調配技術"調試"黑盒方法"

就是method swizzling啦,不是很推薦濫用.

第14條:理解"類對象"的用意

區分類和對象

第3章 接口與API設計

第15條:用前綴避免命名空間衝突

Apple宣稱其保留使用全部「兩字母前綴」(two-letter prefix)的權利,因此咱們加的前綴最好三個字母爲宜。

第16條:提供"全能初始化方法"

若是超類的初始方法不適用與子類,那麼應該重寫這個超類的方法,並在其中拋出異常。

第17條:實現description方法

自定義返回一個有意義的字符串。

第18條:儘可能使用不可變對象

readonly屬性限制外部修改屬性

第19條:使用清晰而協調的命名方式

方法名裏不要使用縮略後的類型名稱

第20條:爲私有方法名加前綴

不要單用一個下橫線作私有方法的前綴,父類極可能已經使用

第21條:理解Objective-C錯誤模型

適當時候在代碼拋出異常

第22條:理解NSCopying協議

第4章 協議與分類

第23條:經過委託與數據源協議進行對象間通訊

第24條:將類的實現代碼分散到便於管理的數個分類之中

第25條:老是爲第三方類的分類名稱加前綴

第26條:勿在分類中聲明屬性

第27條:使用"class-continuation分類"隱藏實現細節

第28條:經過協議提供匿名對象

第5章 內存管理

第29條:理解引用計數

內存管理的三種基本方式之一

第30條:以ARC簡化引用計數

用ARC讓編程更加簡潔,CoreFoundation對象不歸ARC管理,必須適時調用CFRetain/CFRelease

第31條:在dealloc方法中只釋放引用並解除監聽

執行異步任務的方法不該在dealloc裏調用

第32條:編寫"異常安全代碼"時留意內存管理問題

使用try時要記得清理對象,try會下降運行效率,真的遇到異常狀況的時候,應該檢查代碼,而不是盲目使用try。

第33條:以弱引用避免保留環

將某些引用設爲weak,可避免循環引用

第34條:以"自動釋放池塊"下降內存峯值

某些循環語句中能夠用到,減低內存峯值

第35條:用"殭屍對象"調試內存管理問題

第36條:不要使用retainCount

ARC下retainCount已經廢止

第6章 塊與大中樞派發

第37條:理解"塊"這一律念

第38條:爲經常使用的塊類型建立typedef

第39條:用handler塊下降代碼分散程度

第40條:用塊引用其所屬對象時不要出現保留環

循環應用問題

第41條:多用派發隊列,少用同步鎖

派發隊列更簡單高效

第42條:多用GCD,少用performSelector系列方法

執行異步線程任務GCD機制更優

第43條:掌握GCD及操做隊列的使用時機

第44條:經過Dispatch Group機制,根據系統資源情況來執行任務

第45條:使用dispatch_once來執行只需運行一次的線程安全代碼

第46條:不要使用dispatch_get_current_queue

ispatch_get_current_queue主要用於解決由不可重入的代碼引發的死鎖

第7章 系統框架

第47條:熟悉系統框架

第48條:多用塊枚舉,少用for循環

最新、最早進的方式

第49條:對自定義其內存管理語義的collection使用無縫橋接

第50條:構建緩存時選用NSCache而非NSDictionary

NSCache提供自動刪減功能,線程安全,不會拷貝鍵

第51條:精簡initialize與load的實現代碼

load的方法不參與覆寫機制,在類加載的時候只調用一次

第52條:別忘了NSTimer會保留其目標對象

用block來打破NSTimer引發的循環引用

相關文章
相關標籤/搜索