runtime 動(dòng)態(tài)添加屬性和方法

轉(zhuǎn)之http://www.tuicool.com/articles/FbuaEve
本代碼需事先導(dǎo)入部分 objc/runtime
中的頭文件,如下所示

import <objc/runtime.h> #import <objc/message.h>

動(dòng)態(tài)創(chuàng)建類

類的創(chuàng)建分為兩步,添加 成員變量
需要在這兩步操作之間,添加 成員方法
則無此要求

  1. Class objc_allocateClassPair(Class superClass,const char* className,size_t extraBytes);

  2. void objc_registerClassPair(Class cls);

Class Test= objc_allocateClassPair([NSObject class], "Test", 0);//為類添加變量class_addIvar(Test, "_name", sizeof(NSString), log2(sizeof(NSString)), @encode(NSString));//為類添加方法//IMP 是函數(shù)指針// typedef id (IMP)(id, SEL, ...);IMP i = imp_implementationWithBlock(^(id this,id some){ NSLog(@"%@",some); return @111;});//注冊(cè)方法名為 test: 的方法SEL s = sel_registerName("test:");class_addMethod(Test, s, i, "i@:");//結(jié)束類的定義objc_registerClassPair(Test);

動(dòng)態(tài)創(chuàng)建對(duì)象

采用上邊代碼創(chuàng)建的 Test
類創(chuàng)建對(duì)象,并通過該對(duì)象操作成員方法和成員變量

//創(chuàng)建對(duì)象id t = [[Test alloc]init];//KVC 動(dòng)態(tài)改變 對(duì)象t 中的實(shí)例變量[t setValue:@"張三" forKey:@"name"];NSLog(@"%@",[t valueForKey:@"name"]);//調(diào)用 t 對(duì)象中的 s 方法選擇器對(duì)于的方法id result = objc_msgSend(t, s,@"傳送內(nèi)容");NSLog(@"%@",result);

運(yùn)行結(jié)果
2014-08-15 00:11:00.239 Test[44644:303] 張三2014-08-15 00:11:00.240 Test[44644:303] 傳送內(nèi)容2014-08-15 00:11:00.241 Test[44644:303] 111

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

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

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,067評(píng)論 0 9
  • 我們常常會(huì)聽說 Objective-C 是一門動(dòng)態(tài)語言,那么這個(gè)「動(dòng)態(tài)」表現(xiàn)在哪呢?我想最主要的表現(xiàn)就是 Obje...
    Ethan_Struggle閱讀 2,339評(píng)論 0 7
  • runtime 和 runloop 作為一個(gè)程序員進(jìn)階是必須的,也是非常重要的, 在面試過程中是經(jīng)常會(huì)被問到的, ...
    made_China閱讀 1,273評(píng)論 0 7
  • Objective-C語言是一門動(dòng)態(tài)語言,他將很多靜態(tài)語言在編譯和鏈接時(shí)期做的事情放到了運(yùn)行時(shí)來處理。這種動(dòng)態(tài)語言...
    tigger丨閱讀 1,599評(píng)論 0 8
  • 原文出處:南峰子的技術(shù)博客 Objective-C語言是一門動(dòng)態(tài)語言,它將很多靜態(tài)語言在編譯和鏈接時(shí)期做的事放到了...
    _燴面_閱讀 1,422評(píng)論 1 5

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