這本書很早有了解過,評價都不錯,但最近才終於把這本書看完,整本書介紹了不少個提升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引發的循環引用