【iOS】編寫高品質iOS代碼的52個有效方法,編寫高品質ios52
《編寫高品質iOS與OS X代碼的52個有效方法》的筆記,通讀了一遍,感覺印象不是特別深刻,寫下筆記記錄下吧。
這個數的結構很清晰,5章52條建議,分點介紹了編寫高效代碼的建議,每點後面有總結,這裡簡單的記錄下這些總結,方便溫習。
因時間原因,先寫5條,有時間逐漸加進來。
第一章:熟悉oc1,瞭解oc起源
- oc為C語言添加了物件導向特性,是其超集。oc使用動態綁定的訊息結構,也就是說已在運行時才會檢查物件類型。接收一條訊息之後,究竟應執行何種代碼,由運行期環境而非編譯器來決定。
- 理解C語言的核心概念有助於寫好oc程式。尤其要掌握記憶體模型與指標。
2,在類的標頭檔中盡量少引入其他標頭檔
- 除非確有必要,否則不要引入標頭檔。一般來說,應在某個類的標頭檔中使用向前聲明來提及別的類,並在實現檔案中引入那些類的標頭檔。這樣做可以盡量降低類與類之間的耦合。
- 有時無法使用向前聲明,比如要聲明某個類遵循一項協議。這種情況下,盡量吧“該類遵循某協議”的這條生命移至“class-continuation分類”中。如果不行的話,就把協議單獨放在一個標頭檔中,然後將其引入。
3,多用字面量文法,少用與之等價的文法
(就是NSArray *array = @[@1,@2,@3];)
- 應該使用字面量文法來建立字串、數值、數組、字典。與建立此類對象的常規方法相比,這麼做更加簡明扼要。
- 應該通過取下標操作來訪問數組下標或字典中的鍵所對應的元素
- 用字面量文法建立數組或字典時,若之中有nil,則會拋出異常。因此,務必確保值裡不含nil。
4,多用類型常量,少用#define預先處理指令
(不同意這點...)
- 不要用預先處理指令定義常量。這樣定義出來的常量不含類型資訊,編譯器只是會在編譯前據此執行尋找與替換操作。即使有人重新定義了常量值,編譯器也不會產生警告資訊,這將導致應用程式中的常量值不一致。
- 在實現檔案中使用static const來定義“只在編譯單元內可見的常量”。由於此類常量不在全域符號表中,所以無須為其名稱加首碼。
- 在標頭檔中使用extern來聲明全域變數,並在相關實現檔案中定義其值。這種常量要出現在全域符號表中,所以其名稱應加以區隔,通常用與之相關的類名做首碼。
5,用枚舉標識狀態、選項、狀態代碼
- 應該用枚舉表示狀態機器的狀態、傳遞給方法的選項以及狀態代碼等值,給這些值起個易懂的名字。
- 如果把傳遞給某個方法的選項表示為枚舉類型,而多個選項又可同時使用,那麼就將個選項值定義為2的冪,以便通過按位或操作將其組合起來。
- 用NS_ENUM與NSOPTIONS宏來定義枚舉類型,並指明其底層資料類型。這樣做可以確保枚舉是用開發人員所選的底層資料類型實現出來的,而不會採用編譯器所選的類型。
- 在處理枚舉類型的swith語句中不要實現default分支。這樣的話,加入新枚舉之後,編譯器就回提示開發人員:switch語句並未處理所有枚舉。