概念
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)換