第一條:了解Objective-C的起源
Objective-C使用“消息結(jié)構”(messaging structure)而非“函數(shù)調(diào)用”(function calling)機制枷颊。
消息機制與函數(shù)調(diào)用的區(qū)別在于:
1.使用消息結(jié)構的語言,其運行時所應執(zhí)行的代碼由運行時環(huán)境決定;
2.使用函數(shù)調(diào)用的語言顶吮,其運行時所應執(zhí)行的代碼由編譯器決定散吵;
3.如果函數(shù)是多態(tài)的,那么在運行時就要按照“虛方法表”來查找到底應該執(zhí)行哪個函數(shù)實現(xiàn)
4.而采用消息結(jié)構的語言梗夸,不論是否多態(tài)羞迷,總是在運行時才會去查找所要執(zhí)行的方法。
5.采用消息結(jié)構的語言盐须,編譯器也不關系接受消息的對象的類型玩荠,在運行時才會去處理,其過程叫做“動態(tài)綁定”贼邓,在運行時才會檢查對象類型
Objective-C的重要工作都由“運行期組件”(runtime component)而非編譯器來完成阶冈。
運行期組件:本質(zhì)上就是一種與開發(fā)者所編代碼相鏈接的“動態(tài)庫”,能把開發(fā)者所編寫的所有程序粘合起來塑径。
所有的Objective-C對象所占的內(nèi)存空間總是分配在“堆空間”(heap space)中女坑,而絕不會分配在“棧”(stack)上统舀。
如果有一個新的變量匆骗,指向同一對象地址,那么并不拷貝對象誉简,只是這兩個變量都指向此對象碉就。
分配在堆中的內(nèi)存必須由程序員直接管理束世,而分配在棧上的內(nèi)存會在“棧幀”(stack frame)彈出時自動清理凸克。
【要點】
Objective-C 為C語言添加了面向?qū)ο筇匦园吡唬瞧涑唷bjective-C使用動態(tài)綁定的消息結(jié)構喇勋,也就是說涤姊,在運行時才會檢查對象類型籽懦。接收一條消息后财骨,究竟應執(zhí)行何種代碼肋拔,由運行時環(huán)境而非編譯器來決定锈津。
理解C語言的核心概念有助于寫好Objective-C程序。尤其要掌握內(nèi)存模型與指針凉蜂。