Objective-C作為一門動態(tài)編譯語言,會將編譯和連接時要做的事情推遲到運行時。這代表著OC語言不僅僅需要一個編譯環(huán)境悴务,同時也需要一個運行時系統(tǒng)來執(zhí)行編譯好的代碼。
也可以這樣理解:“運行時系統(tǒng)(runtime)扮演的角色類似Objective-C語言的操作系統(tǒng)譬猫,Objective-C基于該系統(tǒng)來工作”讯檐。
一.靜態(tài)語言和動態(tài)語言的區(qū)別
1.靜態(tài)語言如下
#include < stdio.h >
int main(int argc, const char **argv[])
{
printf("Hello World!");
return 0;
}
靜態(tài)語言執(zhí)行過程:經(jīng)過編譯器的語言分析,優(yōu)化然后將你最佳化的代碼編譯成匯編語言染服,然后完全按照你的設(shè)計邏輯和代碼自上而下的執(zhí)行裂垦。
2.動態(tài)語言O(shè)bjective-C
[receiver message]
objc_msgSend(receiver, selector)
objc_msgSend(receiver, selector, arg1, arg2, …)
Objective-C語言執(zhí)行過程:消息只有到運行時才會和函數(shù)實現(xiàn)綁定起來,而不是按照編譯好的邏輯一成不變的執(zhí)行肌索。
一.介紹下動態(tài)語言
1.runtime確實是開源的蕉拢。
目前蘋果公司和GNU各自維護一個開源的runtime版本特碳,這兩個版本之間都在努力的保持一致。
下載地址
2晕换、runtime是由C語言實現(xiàn)的
runtime做為Objective-C最核心的部分午乓,幾乎全部由C語言實現(xiàn)。這里的“幾乎”所指的例外就包含有的方法(比如下面要說道的objc_msgSend方法)是用匯編實現(xiàn)的闸准。
3.runtime的兩個版本
runtime其實有兩個版本:"Modern(現(xiàn)行)"和"legacy(早期)"益愈。
Objective-C 2.0 之后采用的是Modern版的 runtime系統(tǒng),只能運行在 iOS 和 OS X 10.5 之后的64位程序中夷家。
而OS X較老的32位程序仍采用 Objective-C 1中得(早期) Legacy 版本的 runtime系統(tǒng)蒸其。
這兩個版本最大的區(qū)別在于當你更改一個類的實例變量的布局時,在早期版本中你需要重新編譯它的子類库快,而現(xiàn)行版本就不需要摸袁。