1.獲取類的成員變量
//定義一個(gè)整數(shù)來接收一忱,所需獲取的類的屬性個(gè)數(shù)
unsigned int count =0;
/*
參數(shù)一:對(duì)象的類名
參數(shù)二:用來接收屬性個(gè)數(shù)的 整型
*/
Ivar *ivars ?= class_copyIvarList(objc_getClass("類的名稱"),&count);
//取出所獲取的屬性
for(int i = 0; i < count; i++) {
//拿出一個(gè)一個(gè)的成員變量
Ivar ivar = ivars[i];
//獲取屬性的名字
const char * name = ivar_getName(ivar);
//將C類型的字符串轉(zhuǎn)換成Object-C類型的字符串
NSString * ocName = [NSString stringWithUTF8String:name];
NSLog(@"%@",ocName);
}
2.獲取類的方法
/*
參數(shù)一:? 對(duì)象的類名
參數(shù)二: ?所要獲取的方法
*/
Method imageNamedMethod = class_getClassMethod(objc_getClass("類的名稱"),@selector(imageNamed:));
Method xmg_imageNamedMethod = class_getClassMethod(objc_getClass("類的名稱"),@selector(xmg_imageNamed:));
//交互方法runtime, 這個(gè)很少用
method_exchangeImplementations(imageNamedMethod, xmg_imageNamedMethod);
/*
調(diào)用imageNamed -> xmg_imageNamed
調(diào)用xmg_imageNamed -> imageNamed
*/
3. 動(dòng)態(tài)添加屬性
/*
參數(shù)一object:給哪個(gè)對(duì)象添加屬性
參數(shù)二key:屬性名稱
參數(shù)三value:屬性值
參數(shù)四policy:保存存策略
*/
objc_setAssociatedObject(self,@"name", name,OBJC_ASSOCIATION_RETAIN_NONATOMIC);
4.消息機(jī)制
//OC
//HKPerson *p = [HKPerson alloc];
//p = [p init];
//C
Person *p = objc_msgSend(objc_getClass("Person"),sel_registerName("alloc"));
p = objc_msgSend(p,sel_registerName("init"));
//調(diào)用eat無參數(shù)方法
objc_msgSend(p,@selector(eat));
//調(diào)用run有參數(shù)方法@selector(run:)后依獎(jiǎng)填寫要傳入的參數(shù)
objc_msgSend(p,@selector(run:),20);