runtime

 runtime : 運行時機制  
1、runtime是什麼 
1> runtime是一個全動態語言,是基於c語言的庫,裏面包含了不少底層的C語言函數。 
2> 平時編寫的OC代碼, 在程序運行過程當中, 其實最終都是轉成了runtime的C語言代碼, runtime算是OC方法的底層實現,換句話說oc的實現也就是runtime的底層調用。
下面來舉個實例,(在前面的文章中講到過了!經過編譯成c語言,咱們能夠看到底層文件) 
OC : 
[[Person alloc] init] 
上面的Person對象建立時候, 
runtime : 
objc_msgSend(objc_msgSend(「Person」 , 「alloc」), 「init」)
而上面這部分只是明白了最基礎的原理,那麼runtime又有哪些更深的運用呢? 
2、runtime能用來作什麼?  
1> runtime是屬於OC的底層, 能夠進行一些很是底層的操做(用OC是沒法現實的, 很差實現能夠經過runtime是實現)
2>在程序運行過程當中, 動態建立一個類,例如:KVO的底層實現。
在程序運行過程當中, 動態地爲某個類添加屬性\方法, 修改屬性值\方法。
遍歷一個類的全部成員變量(屬性)\全部方法
3.相關的頭文件和函數 
1> 頭文件
 

打開頭文件,咱們發現許多的方法,可是咱們用的最多的是下面的函數, 
相關函數
objc_msgSend : 給對象發送消息
class_copyMethodList : 遍歷某個類全部的方法
class_copyIvarList : 遍歷某個類全部的成員變量
class_…..
固然,在使用這些東西的時候,咱們首先要明白一些東西, 
必備常識 
1> Ivar : 成員變量 
2> Method : 成員方法
2> runtime相關實際應用
NSCoding(歸檔和解檔, 利用runtime遍歷模型對象的全部屬性)
字典 –> 模型 (利用runtime遍歷模型對象的全部屬性, 根據屬性名從字典中取出對應的值, 設置到模型的屬性上)
KVO(利用runtime動態產生一個類)
用於封裝框架(想怎麼改就怎麼改)
相關文章
相關標籤/搜索