美文网首页
runtime 动态添加属性和方法

runtime 动态添加属性和方法

作者: maniacRadish | 来源:发表于2016-06-02 17:59 被阅读57次

转之http://www.tuicool.com/articles/FbuaEve
本代码需事先导入部分 objc/runtime
中的头文件,如下所示

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

动态创建类

类的创建分为两步,添加 成员变量
需要在这两步操作之间,添加 成员方法
则无此要求

  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 是函数指针// typedef id (IMP)(id, SEL, ...);IMP i = imp_implementationWithBlock(^(id this,id some){ NSLog(@"%@",some); return @111;});//注册方法名为 test: 的方法SEL s = sel_registerName("test:");class_addMethod(Test, s, i, "i@:");//结束类的定义objc_registerClassPair(Test);

动态创建对象

采用上边代码创建的 Test
类创建对象,并通过该对象操作成员方法和成员变量

//创建对象id t = [[Test alloc]init];//KVC 动态改变 对象t 中的实例变量[t setValue:@"张三" forKey:@"name"];NSLog(@"%@",[t valueForKey:@"name"]);//调用 t 对象中的 s 方法选择器对于的方法id result = objc_msgSend(t, s,@"传送内容");NSLog(@"%@",result);

运行结果
2014-08-15 00:11:00.239 Test[44644:303] 张三2014-08-15 00:11:00.240 Test[44644:303] 传送内容2014-08-15 00:11:00.241 Test[44644:303] 111

相关文章

  • runtime的理解(二)

    主要内容 利用 runtime 交换方法 利用 runtime 动态添加方法 利用 runtime 动态添加属性 ...

  • iOS Runtime经典面试题整理

    1,runtime 如何动态添加方法和属性和动态属性控制 通过苹果官方文档查看,我们可以发现runtime的内部存...

  • runtime相关

    修改系统方法 动态添加方法 动态给系统类添加属性(给分类添加属性) runtime+kvc 转换模型

  • runtime和oc内存区域(2018-04-02)

    runtime常用的几个方法: 交换方法 动态添加属性 动态添加方法 1.交换方法 class_getClassM...

  • iOS runtime 动态添加属性,方法,方法交换案例

    iOS runtime 动态添加属性,方法,方法交换案例 动态添加属性 我之前写过分类的文章,说过,分类不能添加成...

  • Objective-C关联对象的实现

    目的 在 NSObject 类中,添加 name 属性。 方案 利用 runtime 的相关方法: 动态添加属性 ...

  • ios runtime

    什么是runtime runtime运用 在程序运行过程中,动态的创建类,动态添加、修改这个类的属性和方法 遍历一...

  • objc runtime (四)动态添加属性

    在《objc runtime (二)交换方法》中我提到过runtime最实用的就是交换方法和动态添加属性两个用法。...

  • RunTime - 方法交换

    上篇我们讲到了runtime 的动态添加属性和方法,遍历对象的属性列表,今天我们来讲一下runtime里面更好用的...

  • runtime 动态添加属性和方法

    转之http://www.tuicool.com/articles/FbuaEve本代码需事先导入部分 objc/...

网友评论

      本文标题:runtime 动态添加属性和方法

      本文链接:https://www.haomeiwen.com/subject/wzskdttx.html