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動態產生一個類) 用於封裝框架(想怎麼改就怎麼改)