整個(gè)《面試題》都是對(duì)2017年6月iOS招人心得(附面試題)的整理。
1.解釋動(dòng)態(tài)語(yǔ)言、靜態(tài)語(yǔ)言
動(dòng)態(tài)類型語(yǔ)言:動(dòng)態(tài)類型語(yǔ)言是指在運(yùn)行期間才去做數(shù)據(jù)類型檢查的語(yǔ)言,也就是說(shuō),在用動(dòng)態(tài)類型的語(yǔ)言編程時(shí),永遠(yuǎn)也不用給任何變量指定數(shù)據(jù)類型,該語(yǔ)言會(huì)在你第一次賦值給變量時(shí),在內(nèi)部將數(shù)據(jù)類型記錄下來(lái)。Python和Ruby就是一種典型的動(dòng)態(tài)類型語(yǔ)言,其他的各種腳本語(yǔ)言如VBScript也多少屬于動(dòng)態(tài)類型語(yǔ)言。
靜態(tài)類型語(yǔ)言:靜態(tài)類型語(yǔ)言與動(dòng)態(tài)類型語(yǔ)言剛好相反,它的數(shù)據(jù)類型是在編譯其間檢查的,也就是說(shuō)在寫程序時(shí)要聲明所有變量的數(shù)據(jù)類型,C/C++是靜態(tài)類型語(yǔ)言的典型代表,其他的靜態(tài)類型語(yǔ)言還有C#、JAVA等。Objective-C雖然在寫程序時(shí)聲明了變量的數(shù)據(jù)類型,但是在編譯期間并沒(méi)有檢查。因?yàn)镺bjective-C類和對(duì)象都是在運(yùn)行時(shí)候創(chuàng)建的,所以編譯期間沒(méi)辦法檢查。
??總結(jié)::兩者的區(qū)別在于是否在編譯期間做數(shù)據(jù)類型檢查。
2.OC是動(dòng)態(tài)語(yǔ)言的原因
Objective-C 是C 的超集,在C 語(yǔ)言的基礎(chǔ)上添加了面向?qū)ο筇匦?,并且利用Runtime 這個(gè)運(yùn)行時(shí)機(jī)制,為Objective-C 增添了動(dòng)態(tài)的特性。
??
??Objective-C 可以通過(guò)Runtime 這個(gè)運(yùn)行時(shí)機(jī)制,在運(yùn)行時(shí)動(dòng)態(tài)的添加變量、方法、類等,所以說(shuō)Objective-C 是一門動(dòng)態(tài)的語(yǔ)言。
??
??Objective-C 使用的是 “消息結(jié)構(gòu)” 并非 “函數(shù)調(diào)用”:使用消息結(jié)構(gòu)的的語(yǔ)言,其運(yùn)行時(shí)所應(yīng)執(zhí)行的代碼由運(yùn)行期決定;而使用函數(shù)調(diào)用的語(yǔ)言,則由編譯器決定。
??
??總結(jié):OC利用Runtime可以在運(yùn)行的時(shí)候創(chuàng)建類,修改類,修改對(duì)象調(diào)用的方法。