1. 程式人生 > >Objective-C是動態執行時語言的個人理解

Objective-C是動態執行時語言的個人理解

      以前開發時沒有特別注意這些細節問題,今天突然被問到,一下子懵圈了,經過一番查詢和比較,再加上小編的理解終於是瞭解的差不多了,現在分享給大家!

1、什麼是動態語言?

動態語言,是指程式在執行時可以改變其結構:新的函式可以被引進,已有的函式可以被刪除等在結構上的變化。比如眾所周知的ECMAScript(JavaScript)便是一個動態語言。除此之外如Ruby、Python等也都屬於動態語言,而C、C++等語言則不屬於動態語言。

有三個名詞容易混淆:

Dynamic Programming Language (動態語言或動態程式語言)

Dynamically Typed Language (動態型別語言)


Statically Typed Language (靜態型別語言)

所謂的動態型別語言,意思就是型別的檢查是在執行時做的。

2、靜態型別

而靜態型別語言的型別判斷是在執行前判斷(如編譯階段),比如C#、java就是靜態型別語言,靜態型別語言為了達到多型會採取一些型別鑑別手段,如繼承、介面,而動態型別語言卻不需要,所以一般動態語言都會採用dynamic typing,常出現於指令碼語言中.需要明確說明一點,那就是,是不是動態型別語言與這門語言是不是型別安全的完全不相干的,不要將它們聯絡在一起!

優缺點:

靜態型別語言的主要優點在於其結構非常規範,便於除錯,方便型別安全;缺點是為此需要寫更多的型別相關程式碼,導致不便於閱讀、不清晰明瞭。動態型別語言的優點在於方便閱讀,不需要寫非常多的型別相關的程式碼;缺點自然就是不方便除錯,命名不規範時會造成讀不懂,不利於理解等。順便說一下,現在有這樣一種趨勢,那就是合併動態型別與靜態型別在一種語言中,這樣可以在必要的時候取長補短,Boo就是一個很好的試驗性例子。


3、Objective-C的動態執行性

Objective-C語言是C語言的一個子類,所以Objective-C是一個靜態語言,但是Objective-C的三大特性之一的多型性讓其擁有了動態性。

oc的動態性讓程式可以在執行時判斷其該有的行為,而不是像c等靜態語言一樣在編譯構建時就確定下來。它的動態性主要體現在一下三個方面:

1。動態型別。 如id型別。實際上靜態型別因為其固定性和可預知性而使用得更加廣泛。靜態型別是強型別,而動態型別屬於弱型別。執行時決定接收者。

    這裡補充講一下強、弱型別:語言有無型別、強型別和弱型別三種。無型別的不做任何檢查,甚至不區分指令和資料;弱型別的檢查很弱,僅能區分指令和資料;強型別的嚴格在編譯期進行檢查。

強型別語言在沒有強制型別轉化前,不允許兩種不同型別的變數相互操作

2。 動態繫結。讓程式碼在執行時判斷需要呼叫什麼方法,而不是在編譯時。與其他面嚮物件語言一樣,方法呼叫和程式碼並沒有在編譯時連線在一起,而是在訊息傳送時才進行連線。執行時決定呼叫哪個方法。

3。 動態載入。讓程式在執行時新增程式碼模組以及其他資源。使用者可以根據需要載入一些可執行程式碼和資源,而不是在啟動時就載入所有元件。可執行程式碼中可以含有和程式執行時整合的新類。

物件是執行時類的一個例項。在類裡聲明瞭的例項變數和方法,它的每個例項都在記憶體中擁有同樣的例項變數,以及指向那些方法的指標。在oc中物件永遠是通過指標來引用的。

目前就先介紹到這裡,如果有了新的理解小編會及時的分享給大家(PS:小編是知識的搬運工,喜歡的朋友可以默默的點贊)!