Runtime 是 Objective-C 區(qū)別于 C 語言這樣的靜態(tài)語言的一個非常重要的特性。對于 C 語言贫导,函數(shù)的調(diào)用會在編譯期就已經(jīng)決定好滞时,在編譯完成后直接順序執(zhí)行。但是 OC 是一門動態(tài)語言钞馁,函數(shù)調(diào)用變成了消息發(fā)送,在編譯期不能知道要調(diào)用哪個函數(shù)匿刮。所以 Runtime 無非就是去解決如何在運行時期找到調(diào)用方法這樣的問題指攒。
OC 的消息機制
OC中的方法調(diào)用其實都是轉(zhuǎn)成了objc_msgSend函數(shù)的調(diào)用,給receiver(方法調(diào)用者)發(fā)送了一條消息(selector方法名)
objc_msgSend底層有3大階段僻焚,消息發(fā)送(當前類、父類中查找)膝擂、動態(tài)方法解析虑啤、消息轉(zhuǎn)發(fā)
runtime具體應用
利用關聯(lián)對象(AssociatedObject)給分類添加屬性
遍歷類的所有成員變量(修改textfield的占位文字顏色隙弛、字典轉(zhuǎn)模型、自動歸檔解檔)
交換方法實現(xiàn)(交換系統(tǒng)的方法)
利用消息轉(zhuǎn)發(fā)機制解決方法找不到的異常問題
KVC 字典轉(zhuǎn)模型