runtime獲取檢視內部成員變數(OC和Swift兩種方法獲取)
阿新 • • 發佈:2019-02-09
在開發中經常有些需求,憑藉著蘋果提供的API不好實現,或者實現起來比較麻煩。此時,
我們就可以運用runtime來獲取類的內部成員變數,然後運用KVC進行替換,來達到目的。
下面就貼出運用runtime來獲取內部成員變數的方法,以獲取UITextView類為例:
1>運用Object-C程式碼實現:
執行後,列印結果如下:unsigned int count = 0; Ivar *vars = class_copyIvarList([UITextView class], &count); for (int i = 0; i < count; i++) { Ivar var = vars[i]; NSLog(@"%s", ivar_getName(var)); } free(vars);
2>運用Swift程式碼實現:
執行後列印結果如下:var count: UInt32 = 0 let ivars = class_copyIvarList(UITextView.self, &count) for i in 0 ..< count { let ivar = ivars![Int(i)] let name = ivar_getName(ivar) print(String(cString: name!)) } free(ivars)
從列印結果就可以看出來,能夠獲取蘋果內部沒有暴露出來的成員變量了。
補充:
成員變數和屬性的區別:
以下面的一句程式碼為例進行說明
@property (nonatomic, readonly, strong) UIView *contentView;
簡單來說,成員變數就是帶有下劃線的,沒有帶下劃線的就是屬性。(_contentView就是成員變數,contentView就是屬性)
我們都知道,定義一個屬性,蘋果會自動生成它的成員變數,setter和getter方法