什麼是runtime?函數
1> runtime是一套底層的C語言API(包含不少強大實用的C語言數據類型、C語言函數)code
2> 實際上,平時咱們編寫的OC代碼,底層都是基於runtime實現的對象
* 也就是說,平時咱們編寫的OC代碼,最終都是轉成了底層的runtime代碼(C語言代碼)get
runtime有啥用?io
1> 能動態產生一個類、一個成員變量、一個方法class
2> 能動態修改一個類、一個成員變量、一個方法import
3> 能動態刪除一個類、一個成員變量、一個方法變量
常見的函數、頭文件List
#import <objc/runtime.h> : 成員變量、類、方法遍歷
Ivar * class_copyIvarList : 得到某個類內部的全部成員變量
Method * class_copyMethodList : 得到某個類內部的全部方法
Method class_getInstanceMethod : 得到某個實例方法(對象方法,減號-開頭)
Method class_getClassMethod : 得到某個類方法(加號+開頭)
method_exchangeImplementations : 交換2個方法的具體實現
#import <objc/message.h> : 消息機制
objc_msgSend(....)
runtime的平常應用(持續更新):
1.遍歷類的屬性
unsigned int count; Ivar *ivarList = class_copyIvarList([UITextField class], &count); for (int i = 0; i < count; i++) { Ivar ivar = ivarList[i]; NSLog(@"%s",ivar_getName(ivar)); } free(ivarList);