<a >Effective Objective C 2.0:編寫高質(zhì)量iOS與OS X代碼的52個(gè)有效方法</a>
第 2 條: 在類的頭文件中盡量少引入其它頭文件###
要點(diǎn):####
- 除非確有必要,否則不要引入頭文件.一般來說,應(yīng)在某個(gè)類的頭文件中使用向前聲明來提及別的類,并在實(shí)現(xiàn)文件中引入那些類的頭文件.這樣做可以盡量降低類之間的耦合
- 有時(shí)無法使用向前聲明,比如要聲明某個(gè)類遵循一項(xiàng)協(xié)議.這種情況下,盡量把"該類遵循某協(xié)議"的這條聲明移到"class-continuation分類"中.如果不行的話,就把協(xié)議單獨(dú)放在一個(gè)頭文件中,然后將其引入.
第 3 條: 多用字面量語法,少用與之等價(jià)的方法
要點(diǎn):####
- 應(yīng)該使用字面量語法來創(chuàng)建字符串,數(shù)值,數(shù)組,字典.與創(chuàng)建此類對(duì)象的常規(guī)方法相比,這么做更加簡明扼要.
- 應(yīng)該通過取下標(biāo)操作來訪問數(shù)組下標(biāo)或字典中的鍵所對(duì)應(yīng)的元素.
- 用字面量語法創(chuàng)建數(shù)組或字典時(shí), 若值中有nil,則會(huì)拋出異常.因此,務(wù)必確保值里不含nil.
第 4 條: 多用類型常量,少用#define預(yù)處理指令###
要點(diǎn):####
- 不要用預(yù)處理指令定義常量.這樣定義出來的常量不含類型信息,編譯器只是會(huì)在編譯前據(jù)些執(zhí)行查找與替換操作.即使有人重新定義了常量值,編譯器也不會(huì)產(chǎn)生警告信息,這將導(dǎo)致應(yīng)用程序中的常量值不一致.
- 在實(shí)現(xiàn)文件中使用static const 來定義"只在編譯單元內(nèi)可見的常量".由于此類常量不在全局符號(hào)表中,所以無須為其名稱加前綴.
- 在頭文件中使用extern來聲明全局常量,并在想著實(shí)現(xiàn)文件中定義其值.這種常量要出現(xiàn)在全局符號(hào)表中,所以其名稱應(yīng)加區(qū)隔,通常用與之相關(guān)的類名做前綴.
第 5 條: 用枚舉表示狀態(tài),選項(xiàng),狀態(tài)碼###
要點(diǎn):####
- 應(yīng)該用枚舉來表示狀態(tài)機(jī)制狀態(tài),傳遞給方法的選項(xiàng)以及狀態(tài)碼等值,給這些值起個(gè)易懂的名字.
- 如果把傳遞給某個(gè)方法的選項(xiàng)表示為枚舉類型,而多個(gè)選項(xiàng)又可同時(shí)使用,那么就將各選項(xiàng)值定義為2的冪,以便通過按位或操作將其組合起來.
- 用NS_ENUM 與 NS_OPTIONS 宏來定義枚舉類型,并指明其底層數(shù)據(jù)類型.這樣做可以確保枚舉是用開發(fā)者所選的底層數(shù)據(jù)類型實(shí)現(xiàn)出來的,而不會(huì)采用編譯器所選的類型.
- 在處理枚舉類型的switch語句中不要實(shí)現(xiàn)default分支.這樣的話,加入新枚舉之后,編譯器就會(huì)提示開發(fā)者:switch語句并未處理所有枚舉.