1.運(yùn)行時(shí):在運(yùn)行的時(shí)候,動(dòng)態(tài)獲取隊(duì)形身上的方法,協(xié)議,屬性,成員變量,可以將對(duì)象身上的方法給干掉,弄我們自己的方法
- OC 方法
-(NSArray *)class_copyIvarList{
unsigned int count;
//取類(lèi)的成員變量class_copyIvarList 方法:class_copyMethodList,類(lèi)的guan'l:class_copyPropertyList,類(lèi)的協(xié)議class_copyProtocolList
Ivar *ivarList = class_copyIvarList(self.class, &count);
NSMutableArray *mutable = [NSMutableArray array];
for (int i = 0 ; i < count; i++) {
//去ivarList的首地址
Ivar name = ivarList[i];
//屬性名
const char *proper = ivar_getName(name);
// 類(lèi)型
const char *properType = ivar_getTypeEncoding(name);
//屬性名轉(zhuǎn)換為utf8
NSString *properName = [NSString stringWithUTF8String:proper];
[mutable addObject:properName];
}
return mutable.copy;
}
- Swift方法
class func printIvarList(clazz:AnyClass) -> [AnyObject]{
var count : UInt32 = 0
let ivars = class_copyIvarList(clazz, &count)
var names = [String]()
for i in 0..<count{
let ivar = ivars[Int(i)]
//名字
let name = ivar_getName(ivar)
let nameString = String(CString: name, encoding: NSUTF8StringEncoding)
names.append(nameString!)
//類(lèi)型
let type = ivar_getTypeEncoding(ivar)
let typeString = String(CString: type, encoding: NSUTF8StringEncoding)
print("name=\(nameString ?? ""),type =\(typeString ?? "")")
}
return names
}