第一條:了解Objective-C的語(yǔ)言起源
消息結(jié)構(gòu)和函數(shù)調(diào)用的區(qū)別:使用消息結(jié)構(gòu)的語(yǔ)言,其運(yùn)行時(shí)所執(zhí)行的代碼由運(yùn)行環(huán)境來決定浩螺;使用函數(shù)調(diào)用的語(yǔ)言盯另,則由編譯器決定。如果范例代碼中調(diào)用的函數(shù)是多態(tài)的源哩,那么在運(yùn)行時(shí)就要按照“虛函數(shù)表”來查出到底應(yīng)該執(zhí)行那個(gè)函數(shù)實(shí)現(xiàn)鞋吉。而采用消息結(jié)構(gòu)的語(yǔ)言,不論是否多態(tài)励烦,總是在運(yùn)行時(shí)才會(huì)查找所要執(zhí)行的方法谓着。實(shí)際上,編譯器甚至不關(guān)心接收消息的對(duì)象是何種類型坛掠。接收消息的對(duì)象問題也要在運(yùn)行時(shí)處理赊锚,其過程叫做“動(dòng)態(tài)綁定”。
Objective-C的重要工作都由“運(yùn)行期組件”而非編譯器來完成屉栓。使用Objective-C的面向?qū)ο筇匦运璧娜繑?shù)據(jù)結(jié)構(gòu)及函數(shù)都在運(yùn)行期組件里面舷蒲。
第二條:在類的頭文件中盡量少引入其他頭文件
除非確有必要,否則不要引入頭文件友多。一般來說牲平,應(yīng)在某個(gè)類的頭文件中使用前項(xiàng)聲明來提及別的類,并在實(shí)現(xiàn)文件中引入那些類的頭文件夷陋。這樣做可以盡量降低類的耦合欠拾。
有時(shí)無法使用前項(xiàng)聲明胰锌,比如要聲明某個(gè)類遵循一項(xiàng)協(xié)議骗绕。這種情況下,盡量把“該類遵循某項(xiàng)協(xié)議”的這條聲明移至“class-continuation 分類”中资昧。如果不行的話酬土,就把協(xié)議單獨(dú)放在一個(gè)頭文件中。然后將其引入格带。
第三條:多用字面量語(yǔ)法撤缴,少用與之等價(jià)的方法
NSString *something = @"xxxx";
如果不使用這種語(yǔ)法的話,就要以常見的alloc init的方法來創(chuàng)建并分配初始化NSString對(duì)象叽唱。
字面數(shù)值:
NSNumber *someNumber = @1;
字面數(shù)組:
一般這樣來創(chuàng)建數(shù)組:
NSArray *animals = [NSArray arrayWithObjects:@"cat", @"dog", @"mouse", @"badger", nil];
使用字面量語(yǔ)法來創(chuàng)建則是:
NSArray *animals = @[@"cat", @"dog", @"mouse", @"badger"];
字面量字典
NSDictionary *personData = [NSDictionary dictionaryWithObjectsAndKeys:
@"Matt", @"firstName",
@"Galloway", @"lastName",
[NSNumber numberWithInt28], @"age", nil];
字面語(yǔ)法:
NSDictionary *personData = @{@"firstName" : @"Matt",
@"lastName" : @"Galloway",
@"age": @28};
按照特定鍵訪問其值的傳統(tǒng)做法是:
NSString *lastName = [personData objectForKey@"lastName"];
與之等效的字面量語(yǔ)法則是:
NSString *lastName = personData[@"lastName"]
要點(diǎn):
1)應(yīng)該使用字面量語(yǔ)法來創(chuàng)建字符串,數(shù)值屈呕,數(shù)組,字典
2)應(yīng)該通過取下標(biāo)操作來訪問數(shù)組下標(biāo)或字典中的鍵所對(duì)應(yīng)的元素
3)用字面量語(yǔ)法創(chuàng)建數(shù)組或字典時(shí)棺亭,若值中有nil, 則會(huì)拋出異常虎眨。因此,務(wù)必確保值里不含nil.