很久沒有更新了。咧纠。蓬痒。
年初一直在忙著投簡歷面試。漆羔。梧奢。
好了現(xiàn)在可以停下來寫寫簡書了。演痒。亲轨。
正題
在開發(fā)中經(jīng)常有些需求,憑借著蘋果提供的API不好實(shí)現(xiàn)鸟顺,或者實(shí)現(xiàn)起來比較麻煩惦蚊。此時,
我們就可以運(yùn)用runtime來獲取類的內(nèi)部成員變量讯嫂,然后運(yùn)用KVC進(jìn)行替換蹦锋,來達(dá)到目的。
下面就貼出運(yùn)用runtime來獲取內(nèi)部成員變量的方法端姚,以獲取UITextView類為例:
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);
運(yùn)用Swift代碼實(shí)現(xiàn):
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)
補(bǔ)充:
成員變量和屬性的區(qū)別:
@property (nonatomic, readonly, strong) UIView *contentView;
簡單來說晕粪,成員變量就是帶有下劃線的挤悉,沒有帶下劃線的就是屬性渐裸。(_contentView就是成員變量,contentView就是屬性)
我們都知道,定義一個屬性装悲,蘋果會自動生成它的成員變量昏鹃,setter和getter方法