一:OC消息機制
Objective-C為C語言添加了面向?qū)ο筇匦裕瞧涑琌bjective-C使用動態(tài)綁定的消息結(jié)構(gòu)孕讳,也就是說,在運行時才會檢查對象類型巍膘,接受一條消息之后厂财,究竟應(yīng)執(zhí)行何種代碼,由運行期環(huán)境而非編譯器來決定峡懈。
二:在類的頭文件中盡量少引入其他頭文件
除非有必要璃饱,否則不要引入頭文件,一般來說肪康,應(yīng)在某個類的頭文件中使用向前聲明來提及別的類荚恶,并在實現(xiàn)文件中引入那些類的頭文件,這樣做可以盡量降低類之間的耦合(coupling).
有時無法使用向前聲明磷支,比如要聲明某個類遵循一項協(xié)議谒撼,這種情況下,盡量把“該類遵守協(xié)議”的這條聲明移至”class-continutaion分類”中雾狈。如果不行的話廓潜,就把協(xié)議單獨放在一個頭文件中,然后將其引入。
三:多用字面量語法辩蛋,少用與之等價的方法
NSNumber * number =@1;
NSArray * arr=@[@"2"呻畸,@“2”,@“3”];
NSString * str=arr[1];
NSMutableArray * arr=@[@[@1,@2,@3]mutableCopy];
應(yīng)該使用字面量語法來創(chuàng)建字符串、數(shù)值悼院、數(shù)組擂错、字典。與創(chuàng)建此類對象的常規(guī)方法相比樱蛤,這么做更加簡明扼要钮呀。
應(yīng)該通過取下標(biāo)操作來訪問數(shù)組下標(biāo)或字典中的鍵所對應(yīng)的元素
用字面量語法創(chuàng)建數(shù)字或者字典時,若值中有nil,則會拋出異常昨凡。因此務(wù)必確保值里不含nil..
四:多用類型常量爽醋,少用#define預(yù)處理指令
static conat NSTimeInterval kAnimationDuration = 0.1;
.h
extern NSString * const EOCStringConstant;
.m
NSString * const EOCStringConstant = @"VALUE";
不要用預(yù)處理指令定義常量。這樣定義出來的常量不含類型信息便脊,編譯器只是會在編譯期間據(jù)此執(zhí)行查找與替換操作蚂四。即使有人重新定義了常量值,編譯器也不會產(chǎn)生警告信息哪痰,這將導(dǎo)致應(yīng)用程序中的常量值不一致遂赠。
在實現(xiàn)文件中使用static const來定義"只在編譯單元內(nèi)可見的常量"。由于此類常量不在全局符號表中晌杰,所以無須為其名稱加前綴
在頭文件中使用extern來聲明全局常量并在相關(guān)實現(xiàn)文件中定義其值跷睦。這種常量要出現(xiàn)在全局符號表中,所以其名稱應(yīng)加以區(qū)隔肋演,通常用與之相關(guān)的類名做前綴
五:用枚舉表示狀態(tài)抑诸、選項、狀態(tài)碼
應(yīng)該用枚舉來表示狀態(tài)機的狀態(tài)爹殊,傳遞給方法的選項以及狀態(tài)嗎等值蜕乡,給這些值起個易懂的名字。
如果把傳遞給某個方法的選項表示為枚舉類型梗夸,而多個選項又可同時使用层玲,那么就將各選項值定義為2的冪,以便通過按位或操作將其組合起來反症。
用NS_ENUM與NS_OPTIONS宏來定義枚舉類型辛块,并指明其底層數(shù)據(jù)類型,這樣做可以確保枚舉用開發(fā)者所選的底層數(shù)據(jù)類型事項出來的惰帽,憨降,而不會采用編譯器所選的類型。
在處理枚舉類型的switch語句中不要實現(xiàn)default分支该酗。這樣的話授药,加入新枚舉之后士嚎,編譯器就會提示開發(fā)者:switch語句并未處理所有枚舉。