Runtime自我總結

1.獲取類的成員變量

//定義一個整數(shù)來接收,所需獲取的類的屬性個數(shù)

unsigned int count =0;

/*

參數(shù)一:對象的類名

參數(shù)二:用來接收屬性個數(shù)的 整型

*/

Ivar *ivars ?= class_copyIvarList(objc_getClass("類的名稱"),&count);

//取出所獲取的屬性

for(int i = 0; i < count; i++) {

//拿出一個一個的成員變量

Ivar ivar = ivars[i];

//獲取屬性的名字

const char * name = ivar_getName(ivar);

//將C類型的字符串轉(zhuǎn)換成Object-C類型的字符串

NSString * ocName = [NSString stringWithUTF8String:name];

NSLog(@"%@",ocName);

}

2.獲取類的方法

/*

參數(shù)一:? 對象的類名

參數(shù)二: ?所要獲取的方法

*/

Method imageNamedMethod = class_getClassMethod(objc_getClass("類的名稱"),@selector(imageNamed:));

Method xmg_imageNamedMethod = class_getClassMethod(objc_getClass("類的名稱"),@selector(xmg_imageNamed:));

//交互方法runtime, 這個很少用

method_exchangeImplementations(imageNamedMethod, xmg_imageNamedMethod);

/*

調(diào)用imageNamed -> xmg_imageNamed

調(diào)用xmg_imageNamed -> imageNamed

*/

3. 動態(tài)添加屬性

/*

參數(shù)一object:給哪個對象添加屬性

參數(shù)二key:屬性名稱

參數(shù)三value:屬性值

參數(shù)四policy:保存存策略

*/

objc_setAssociatedObject(self,@"name", name,OBJC_ASSOCIATION_RETAIN_NONATOMIC);

4.消息機制

//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:)后依獎填寫要傳入的參數(shù)

objc_msgSend(p,@selector(run:),20);

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容