在iOS中沒有絕對的私有屬性,雖然沒有辦法直接訪問私有屬性,但是可以利用kvc,kvo間接訪問私有屬性。使用kvc,kvo的前提是知道屬性名,下面這個方法就是如何獲取屬性的變量名及類型。
使用runtime之前要先導(dǎo)入
#import <objc/runtime.h>
然后使用下面這個方法
- (void)printIvar:(Class)class {
// count記錄變量的數(shù)量IVar是runtime聲明的一個宏
unsigned int count = 0;
// 獲取類的所有屬性變量
Ivar *menbers = class_copyIvarList(class, &count);
NSLog(@"count : %i",count);
for (int i = 0; i < count; i++) {
Ivar var = menbers[i];
// 將IVar變量轉(zhuǎn)化為字符串,這里獲得了屬性名和類型
const char *memberName = ivar_getName(var);
const char *memberType = ivar_getTypeEncoding(var);
NSLog(@"%s----%s", memberName, memberType);
//并不能打印父類屬性
}
}
需要注意的是,該方法并不會打印父類的屬性。