這本書很是的好,看完後,感觸挺深,總結紀錄一下,針對ios開發的備忘:
注:分類和原著有些不一樣,本身總結學習用的,僅供參考。
- 瞭解oc起源:繼承c,由Smalltalk演化而來。動態語言,運行期決。須要熟悉c語言。
6. 理解變量屬性 a.原子性 b.讀寫 c.內存管理語義 d.方法名 。儘可能少用atomic .注意使用copy屬性避免數據安全問題。 還有oc動態語言特性,硬編碼問題。類內部不要直接訪問變量。
7. 仍是重複了上一篇:在對象內部儘可能直接訪問實例變量。a.快,沒有派發。b.避免copy複製屬性。c.不會觸發kvo。d.排錯問題有點扯了。
8. 對象等同問題。 isEqual機制原理。hash方法判斷對象是否等同的邏輯。
10.runtime機制的associatedObject.(關聯對象),通常不用。
11.理解objec_msgSend機制(消息傳遞機制)。仍是動態語言特性。a.oc對象每一個方法均可以視爲簡單的c函數。使用了尾遞歸優化了棧,避免過早棧溢出。
12.理解消息轉發機制,常常有:unrecognized selector sent to instance xxx的log。關鍵詞:動態方法解析,系統框架自帶的緩存方法機制原理。
13.方法調配,黑盒子調試。看到這一篇的時候,我只是以爲做者有點喪心病狂,走火入魔了。
14.理解「類對象」用意。a.對象isa指針的定義。b.判斷對象類型方法,不用isEqual,可能有消息轉發觸發。
21.理解錯誤類型。a.正確使用NSError。
22.理解NSCopying協議。a.自定義對象實現copy功能。b.淺拷貝和深拷貝。
23.經過委託和數據源協議進行對象間通訊。a.使用觀察者模式,要考慮weak屬性(非持有)。b.能夠實現含有位段的結構體存儲信息。
26.勿在分類中聲明屬性。category中不能添加變量的問題。能夠用associate來解決。(runtime機制)儘可能避免這種需求,代碼會比較亂,做者說:常常有不可預知的bug。
37.理解「塊」這一律念。a.「堆棧塊」的概念懷疑做者本身象形取的,就是注意塊的引用範圍問題,避免其被提早釋放了。使用copy屬性後,會複製到堆中。b.塊也就是閉包語法。
38.爲經常使用的塊類型建立typedef。
47.熟悉系統框架(cocoa框架),Foundation框架,CFNetwork,CoreAudio,AVFoundation,CoreData,CoreText,TextKit,UIKit,QuartzCore(圖形)等。一樣是說了c的重要性。
2. 在類的頭文件儘可能少引入其餘頭文件,緣由:a.減小編譯時間。b.避免相互引用的問題(import使用了一些預處理進行優化了)。使用@class來解耦(向前聲明),實現class-continuation來實現細節隱藏(包括delegate, 或者獨立申明一個文件,再引入,固然,仍是能夠輕易的被人down出來頭文件的)
3. 使用自帶的糖語法(字面量語法)。這裏只說一下注意點:
4. 多用類型常量,’少用’#define. a.類型問題 不能夠避免修改。仍是要根據代碼需求進行處理。例如: a.#define UNLog(xx, ...) NSLog(@
「」) b.書中不少地方提到的命名問題
15.用前綴避免命名空間衝突。仍是命名問題,做者再次強調了。
18.儘可能使用不可變對象。a.儘可能建立readonly對象,能夠在class-cotinuation中修改爲readwrite。b.主要問題是容易形成數據安全的問題。
19.使用侵襲而協調的命名方式。仍是命名問題。
20.爲私有方法名家前綴。仍是命名問題,估摸着,做者應該是被命名很差的同窗這麼慘了。
25.老是爲第三方的分類名稱加前綴。仍是命名,這一點,作過sdk的同窗應該感觸很深。
27.使用「class-continuation分類」隱藏實現細節。看到這標題,有種做者在湊字數的錯覺。
5. 使用枚舉,選項,狀態代碼. 注意一下枚舉是會自增1的。(DRY)
9. 使用抽象工廠模式,建立類族。
16.提供「全能初始化方法」。a.文檔說明 b.注意子類父類的繼承覆寫問題。
17.實現description方法。這裏讓我想到了另外一個問題:如何將自定義的object存到NSUserDefault。也是同樣的解決思路的。
24.將嘞的實現代碼分散到便於管理的數個分類之中。
28.經過協議提供匿名對象。使用匿名對象來隱藏類型名稱l。
39.用handler塊下降代碼分散程度條的應用。
40.用塊引用其所屬對象時不要出現保留環。
41.多用派發隊列,少用同步鎖。
42.多用GCD,少用performSelector系列方法。
43.掌握GCD及操做隊列的使用時機。
44.經過Dispatch Group機制,根據系統資源情況來執行任務。
45.使用dispatch_once來執行只須要運行一次的線程安全代碼。a.注意一下濫用單例的問題。
46.不要使用dispatch_get_current_queue。a.應該作調試用。*慎用。
48.多用枚舉,少用for循環。
49.對自定義其內存管理語義的collection使用無縫橋接。
50.構建緩存時選用NSCache而非NSDictionary。a.自動釋放資源。「線程安全」。能夠控制內存。b.注意緩存,加快響應速度。
51.精簡initialize與load的實現代碼。提升響應速度,避免「依賴環」的概率。
52.別忘了NSTimer會保留其目標對象。ps:ALL
29.理解引用計數。理解基本的對象引用計數,資源釋放回收,weak引用問題,循環應用,鎖的問題。(又是混字數的)
30.以ARC簡化引用計數。a.__unsafe_unretained與weak的區別。b.__weak關鍵字。c.常見的釋放資源問題。例如非oc對象的釋放問題。
31.在dealloc方法中只釋放引用並解除監聽。a.delloc方法中,注意一些KVO.NSNotification的解除問題。b.文件流的引用關閉問題。c.delloc代碼段代表已經在回收了。
32.編寫「異常安全代碼」時留意內存管理問題。try代碼中會有泄漏問題。其實都發生了catch了,泄漏了已經不重要了。那個輔助功能也是雞肋,沒機會用的趕腳。
33.以弱引用避免保留環。看到這個標題,感受做者又來混字數的。讀完感受也是這樣。DRY。
34.以「自動釋放池塊」下降內存峯值。a.使用@autoreleasepool (貌似也沒有用上的機會的趕腳)
35.用「殭屍對象」調試內存管理問題。a.常見的殭屍模式調試以及全局異常斷點。b.殭屍模式的實現原理。經過修改isa指針,避免釋放等一系列操做,終止程序。
36.不要使用retainCount。a.ARC下已經廢棄。
讀後感:本書講的東西,有一些地方難免重複。不少東西其實都在平時閱讀的源碼中體現了。以致於讓我錯覺得:「原本就是這樣的」。
感謝做者寫出這樣的書來分享本身的經驗,很是感謝。