第一條:了解Object-C的來源
解析:
消息傳遞和函數(shù)調(diào)用的區(qū)別
- 消息傳遞在運(yùn)行時(shí)才會(huì)調(diào)用函數(shù)體,判斷參數(shù)艰争,而編譯期只判斷該函數(shù)是否有申明
- 函數(shù)調(diào)用在編譯期就確定函數(shù)體及其參數(shù)類型
Q:
動(dòng)態(tài)綁定
對(duì)象所占內(nèi)存總是分配在“堆空間”(heap space),不能在棧上分配Object-C對(duì)象
堆空間/椆鸲裕空間原理甩卓?有什么影響,什么時(shí)候用堆什么時(shí)候用棧蕉斜?
要點(diǎn):
1. Objective-C為C語言添加了面向?qū)ο筇匦杂馐粒瞧涑bjective-C使用動(dòng)態(tài)綁定的消息結(jié)構(gòu)宅此,也就是說机错,在運(yùn)行時(shí)才會(huì)檢查對(duì)象類型。接收一條消息之后父腕,究竟應(yīng)該執(zhí)行何種代碼弱匪,由運(yùn)行期環(huán)境而非編譯器決定。
2. 理解C語言的核心概念有助于寫好Objective-C程序璧亮,尤其掌握其內(nèi)存模型與指針萧诫。
第二條:在類的頭文件中盡量少引入其他頭文件
解析:
@class EOCEmployer 向前聲明(forward declaring)
要點(diǎn):
1. 除非確有必要,否則不要引入頭文件枝嘶。一般來說帘饶,應(yīng)在某個(gè)類的頭文件中使用向前聲明來提及別的類,并在實(shí)現(xiàn)文件中引入那些類的頭文件群扶。這樣做可以盡量降低類之間的耦合及刻,并且加快編譯。
2. 有時(shí)無法使用向前聲明竞阐,比如要聲明某個(gè)類遵循一項(xiàng)協(xié)議提茁。這種情況下,盡量把“該類遵循某協(xié)議”的聲明移至“class-continuation分類”中馁菜,如果不行的話茴扁,就把協(xié)議單獨(dú)放入一個(gè)文件,并將其引入汪疮。
第三條:多用字面量方法峭火,少用與之等價(jià)的方法
解析:
什么是字面量語法?字面量語法也是一種糖衣語法智嚷,讓開發(fā)者用起來更方便的語法卖丸,易讀減少出錯(cuò)幾率,如下:
NSNumber *number = @2.5f;
與之等價(jià)的語法是:
NSNumber *number = [NSNumber numberWithFloat:2.5];
映射性數(shù)據(jù)結(jié)構(gòu):字典
字典的字面量語法:
NSDictionary *dic = @{@“number”:value};
等價(jià)于
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:value,@"number",nil];;
value為nil時(shí)盏道,字面量語法會(huì)崩潰稍浆,第二種寫法不會(huì)崩潰,因?yàn)樗挥龅絥il就認(rèn)為停止了,所以用字面量語法更安全衅枫。
局限性:
字面量語法除了除了字符串以外嫁艇,所創(chuàng)建出來的的對(duì)象必須屬于Fundation框架才行。如果自定義這些類的子類弦撩、則無法用字面量語法創(chuàng)建其對(duì)象步咪。自定義字符串是可以用字面量語法,但是要修改編譯器的選項(xiàng)才行益楼。
要點(diǎn):
1. 應(yīng)該使用字面量語法來創(chuàng)建字符串猾漫、數(shù)值、數(shù)組感凤、字典悯周。與創(chuàng)建此類對(duì)象的傳統(tǒng)方法相比,這么做更加簡(jiǎn)明扼要陪竿。
2. 應(yīng)該通過取下標(biāo)操作來訪問數(shù)組下標(biāo)或字典中的鍵所對(duì)應(yīng)的元素
3. 用字面量語法創(chuàng)建數(shù)組或字典時(shí)队橙,若值中有nil,則會(huì)拋異常萨惑。因此務(wù)必確保值里不含nil捐康。