一.Runtime是用C和匯編寫的
二.Runtime常用頭文件
#import<objc/runtime.h>
#import<objc/message.h>
三.Runtime常用函數
class_copyIvarList:獲得某個類內部的素有成員變量
class_copyMethodList:獲得某個類內部的所有方法
class_getInstanceMethod:獲得某個具體的實例方法
class_getClassMethod:獲得某個具體的類方法
class_getMethodImplementation:獲取方法實現
method_exchangeImplementations:交換兩個方法的實現
objc_msgSend:給對象發送消息
class_addMethod:添加方法
objc_getAssociatedObject:根據關聯的key,獲取關聯的值
objc_setAssociatedObject:設置關聯屬性
四.Runtime使用場景
發送消息
交換方法
動態生成屬性,方法
通過block回調,直接調用action
歸檔,解檔
字典轉模型
五.Runtime各種使用場景的具體實現
1.發送消息
注意點:
2.交換方法
因為不能直接在分類中重寫系統方法,例如imageNamed,這樣會把系統功能覆蓋掉,分類中不能調用super,所以需要用到交換方法來代替重寫。
3.動態生成屬性,方法
如果一個類的方法非常多,加載類到內存的時候也比較資源,需要給每個方法生成映射表,動態生成方法則解決了這個問題。
動態添加屬性
4.通過block回調,直接調用action
//通過block回調,直接調用action
5.歸檔,解檔
6.字典轉模型
KVC:遍歷字典中的所有key,去模型中查找有沒有對應的屬性名
Runtime:遍歷模型中的所有屬性名,去字典中查找