runtime是什麼?
1.runtime 是一套底層的C語言API(包含了很多強大實用的C語言數據類型,C語言函數)
2.實際上,平時我們編寫的OC代碼,底層都是基於runtime實現的,也就是說,我們編寫的OC代碼,最終都是轉成了底層的runtime代碼(C語言代碼)
總結:簡單明瞭的說,OC的底層是C語言,而runtime就相當於是OC的幕後工作者,程序的運行都會經過OC代碼 ---> runtime的 C 語言代碼這一過程。
runtime在有什麼作用?
runtime能夠動態的生成,修改,刪除一個類,一個成員變量,一個方法。
runtime常見的函數,頭文件
#import <objc / runtime . h>
Ivar * class_copyIvarList : 獲得某個類內部的所有成員變量 Ivar:成員變量
Method * class _copyMethodList : 獲得某個類內部的所有方法 Method:成員方法
Method class_getInstanceMethod : 獲得某個實例方法(對象方法,減號— 開頭)
Method class_getClassMethod : 獲得某個類方法(加號+開頭)
Method_exchangeImplementations : 交換2個方法的具體實現
我們在實際開發中調用方法實際發生了什麼呢?
[self printMessageWithString:@"Hello World!"];
它實際上會被編譯器翻譯成:
objc_msgSend(self,@selector(printMessageWithString:),@"Hello World!")
runtime的相關應用:
1.封裝框架,runtime機制在實際開發中的主要用途
2.NSCoding(歸檔,解檔,利用runtime遍歷模型對象的所有屬性)
3.NSDictionary:(利用runtime遍歷模型對象的所有屬性, 根據屬性名從字典中取出對應的值, 設置到模型的屬性上)
4.KVO(利用了runtime動態的產生一個類)