為什么說(shuō) Object-C 是動(dòng)態(tài)語(yǔ)言?
前言
為什么寫(xiě)這篇文章
干了有一段時(shí)間的iOS了,今天看公眾號(hào)推送了一篇關(guān)于面試題的文章,很多基礎(chǔ)問(wèn)題都不知道怎么回答,看網(wǎng)上的答案都不怎么通俗,太書(shū)面了,我決定以口頭表達(dá)的方式整理這些回答。
參考鏈接,為什么說(shuō) Object-C 是動(dòng)態(tài)語(yǔ)言?
什么是動(dòng)態(tài)語(yǔ)言?
動(dòng)態(tài)語(yǔ)言就是,程序在運(yùn)行時(shí)可以改變,可以加新的(函數(shù)),可以替換和刪除舊的。
http://www.itdecent.cn/p/b1a6be1bdc87 這篇文章中提到,動(dòng)態(tài)語(yǔ)言可以理解為兩種:
- 動(dòng)態(tài)語(yǔ)言:(Dynamic programming Language -動(dòng)態(tài)語(yǔ)言或動(dòng)態(tài)編程語(yǔ)言
- Dynamically Typed Language(動(dòng)態(tài)類型語(yǔ)言)所謂的動(dòng)態(tài)類型語(yǔ)言,就是類型的檢查是在運(yùn)行時(shí)做的。
其實(shí)沒(méi)有一個(gè)動(dòng)態(tài)語(yǔ)言的標(biāo)準(zhǔn),只是相對(duì)靜態(tài)的而言,只要是在運(yùn)行時(shí)可以修改的,都可以理解為動(dòng)態(tài)語(yǔ)言。
回答
Object-C 將很多事放到了運(yùn)行時(shí)來(lái)處理。為了實(shí)現(xiàn)這樣的工作,Obejct-C 提供了 Objc Runtime 機(jī)制來(lái)動(dòng)態(tài)創(chuàng)建類和對(duì)象,進(jìn)行消息發(fā)送和轉(zhuǎn)發(fā)。
哪些事
- 動(dòng)態(tài)類型 - 運(yùn)行時(shí)再?zèng)Q定對(duì)象的類型(id類型就是最直接的體現(xiàn))
- 動(dòng)態(tài)綁定 - 對(duì)象類型確定后才將屬性和消息(函數(shù))與對(duì)象綁定。
- 動(dòng)態(tài)加載 - 動(dòng)態(tài)加載所需資源,比如@2x圖片。
這里已經(jīng)可以回答本文的問(wèn)題了。但是這并沒(méi)有什么知識(shí)點(diǎn),真正的知識(shí)點(diǎn)還得接著學(xué)。Runtime主要做了哪些事,還是回原文章看吧。
記得剛畢業(yè)的時(shí)候跟同學(xué)一起去面試,面試官問(wèn)了我?guī)讉€(gè)技術(shù)問(wèn)題我就敗下陣來(lái),同學(xué)比我厲害,面試官問(wèn)了他好幾個(gè)問(wèn)題,回答完接著深入問(wèn),一直問(wèn)道回答不上來(lái)。最后面試官告訴他,“要一直問(wèn)到你回答不上來(lái),或者我也不知道”,這樣才能知道你到底了解多少。知識(shí)是無(wú)窮無(wú)盡的,一個(gè)runtime可能面試官會(huì)問(wèn)很深很深,我自然是了解的不深,以后一定多加學(xué)習(xí)。