IOS---Runtime 之理解
阿新 • • 發佈:2019-02-05
1:弄了三天的IOS Runtime 終於有了重新認識,因為 Objective-C 是一門動態語言,所以它需要一個執行時系統 ,一切語法結構都是先轉化為對應的C語言後再執行的
2:Runtime 應用場景非常多,只是我們沒有發現,比如如何列印日誌,方法交換,方法交換必然涉及到分類的概念,用刀分類的概念必然會想到在分類中加屬性可以嗎?可以為什麼?不可用為什麼?
答曰:正常的思路下在分類中是不可以新增成員屬性變數的,為什麼?1)分類裡面不能新增Ivar是因為分類本身並不是一個真正的類,它並沒有自己的ISA 類最開始生成了很多基本屬性,比如IvarList,MethodList,分類只會將自己的method attach到主類,並不會影響到主類的IvarList。這就是為什麼分類裡面不能增加成員變數的原因。 2)category是無法新增例項變數的(因為在執行期,物件的記憶體佈局已經確定,如果新增例項變數就會破壞類的內部佈局,這對編譯型語言來說是災難性的)如何新增呢?可以Attache
3:然後可以在專案中時時用到Runtime 資料解析,MJExtension 和YYModel 參照專案中使用,的確花樣百出,但是效率最高的應該是自己手寫,第三方框架個人比較偏好YYModel 參照網站 https://blog.ibireme.com/2015/10/23/ios_model_framework_benchmark/
4:方法交換
如何在每個類中列印日誌呢?思索下(load )