看到“為什么說Objective-C是一門動態(tài)的語言灭将?”這個很深奧的問題,在網(wǎng)上瀏覽了一些專家的見解失都,總結(jié)了一些柏蘑,留作備用,以備不時之需(萬一誰再問這么無聊的問題粹庞,就這樣懟回去)
1咳焚、什么是動態(tài)語言?(Dynamic Programming Language -動態(tài)語言或動態(tài)編程語言)
動態(tài)語言庞溜,是指程序在運行時可以改變其結(jié)構(gòu):新的函數(shù)可以被引進(jìn)革半,已有的函數(shù)可以被刪除等在結(jié)構(gòu)上的變化。比如Ruby流码、Python等就是動態(tài)語言又官,而C、C++等語言則不屬于動態(tài)語言漫试。
Dynamically Typed Language (動態(tài)類型語言)
所謂的動態(tài)類型語言六敬,意思就是類型的檢查是在運行時做的。
2驾荣、靜態(tài)類型 (Statically Typed Language-靜態(tài)類型語言)
而靜態(tài)類型語言的類型判斷是在運行前判斷(如編譯階段)外构,比如C#、Java就是靜態(tài)類型語言秘车,靜態(tài)類型語言為了達(dá)到多態(tài)會采取一些類型鑒別手段典勇,如繼承、接口叮趴,而動態(tài)類型語言卻不需要割笙,所以一般動態(tài)語言都會采用動態(tài)類型(Dynamically Typed),常出現(xiàn)于腳本語言中眯亦。
是不是動態(tài)類型語言與這門語言是不是類型安全的完全不相干的伤溉,不要將它們聯(lián)系在一起!
靜態(tài)類型語言的優(yōu)缺點:
優(yōu)點:其結(jié)構(gòu)非常規(guī)范妻率,便于調(diào)試乱顾,方便類型安全;
缺點:需要寫更多的類型相關(guān)代碼宫静,導(dǎo)致不便于閱讀走净、不清晰明了券时。
動態(tài)類型語言的優(yōu)缺點:
優(yōu)點:方便閱讀,不需要寫非常多的類型相關(guān)的代碼伏伯;
缺點:不方便調(diào)試橘洞,命名不規(guī)范時會造成讀不懂,不利于理解等说搅。
3炸枣、Objective-C的動態(tài)運行性
Objective-C語言是C語言的一個子類,所以O(shè)bjective-C是一個靜態(tài)語言弄唧,但是Objective-C的三大特性之一的多態(tài)性讓其擁有了動態(tài)性适肠。
Objective-C的動態(tài)性讓程序可以在運行時判斷其該有的行為,而不是像C等靜態(tài)語言一樣在編譯構(gòu)建時就確定下來候引。它的動態(tài)性主要體現(xiàn)在一下三個方面:
1侯养、動態(tài)類型。 如id類型背伴。實際上靜態(tài)類型因為其固定性和可預(yù)知性而使用得更加廣泛沸毁。靜態(tài)類型是強類型,而動態(tài)類型屬于弱類型傻寂。運行時決定接收者息尺。
2、 動態(tài)綁定疾掰。讓代碼在運行時判斷需要調(diào)用什么方法搂誉,而不是在編譯時。與其他面向?qū)ο笳Z言一樣静檬,方法調(diào)用和代碼并沒有在編譯時連接在一起炭懊,而是在消息發(fā)送時才進(jìn)行連接。運行時決定調(diào)用哪個方法拂檩。
3侮腹、 動態(tài)載入。讓程序在運行時添加代碼模塊以及其他資源稻励。用戶可以根據(jù)需要加載一些可執(zhí)行代碼和資源父阻,而不是在啟動時就加載所有組件⊥椋可執(zhí)行代碼中可以含有和程序運行時整合的新類加矛。
對象是運行時類的一個實例。在類里聲明了的實例變量和方法煤篙,它的每個實例都在內(nèi)存中擁有同樣的實例變量斟览,以及指向那些方法的指針。在Objective-C中對象永遠(yuǎn)是通過指針來引用的辑奈。