概念
Objective-C是基于C語言加入面向?qū)ο筇匦院拖⑥D(zhuǎn)發(fā)機制的動態(tài)語言,這就是說它不僅需要一個編譯器,還需要Runtime系統(tǒng)動態(tài)的創(chuàng)建類和對象,進行消息發(fā)送和轉(zhuǎn)發(fā)。
我們寫的代碼在程序運行過程中都會被轉(zhuǎn)化成runtime的C代碼執(zhí)行,例如[target doSomething];會被轉(zhuǎn)化成objc_msgSend(target, @selector(doSomething));。
OC中一切都被設(shè)計成了對象,我們都知道一個類被初始化成一個實例,這個實例是一個對象。實際上一個類本質(zhì)上也是一個對象,在runtime中用結(jié)構(gòu)體表示。
runtime是OC的底層,它就是一套純C語言的API。那說到這,OC可以運行代碼runtime肯定能運行,runtime可以運行的程序在OC下未必能夠運行。
為什么要熟悉掌握Runtime機制?
Runtime 在實際開發(fā)中,會經(jīng)常用到嗎?這個答案是肯定的。但是Runtime用的好不好在于理解程度,理解的好代碼質(zhì)量高效實用;用的不好,容易自己造坑。在實際開發(fā)中,我并不是推薦大家熟悉靈活的運用底層的東西,而是熟悉知道底層的運行機制。要不已經(jīng)封裝好看又好用的API干啥使。
Runtime 具體都干啥使用?
比如:動態(tài)添加屬性、動態(tài)添加方法、方法交換、字典模型轉(zhuǎn)換