首页 > 代码库 > runtime 02-简单使用
runtime 02-简单使用
runtime机制为我们提供了一系列的方法让我们可以在程序运行时动态修改类、对象中的所有属性、方法。
下面就介绍运行时一种很常见的使用方式,字典转模型。当然,你可能会说,“我用KVO直接 setValuesForKeysWithDictionary: 传入一个字典一样可以快速将字典转模型啊”,但是这种方法有它的弊端,只有遍历某个模型中所有的成员变量,然后通过成员变量从字典中取出对应的值并赋值最为稳妥,由于篇幅有限,这里暂且不讨论那么多,你权且当作多认识一种数据转模型的方式,以及初步认识一下runtime的强大。
1、假设我定义了一个类(随便写的,不要纠结名字,.m文件啥也没写);
下面就介绍运行时一种很常见的使用方式,字典转模型。当然,你可能会说,“我用KVO直接 setValuesForKeysWithDictionary: 传入一个字典一样可以快速将字典转模型啊”,但是这种方法有它的弊端,只有遍历某个模型中所有的成员变量,然后通过成员变量从字典中取出对应的值并赋值最为稳妥,由于篇幅有限,这里暂且不讨论那么多,你权且当作多认识一种数据转模型的方式,以及初步认识一下runtime的强大。
1、假设我定义了一个类(随便写的,不要纠结名字,.m文件啥也没写);
1 @interface Lender : NSObject{2 CGFloat height;3 }4 @property (nonatomic, copy) NSString *name;5 @property (nonatomic, strong) NSNumber *age;6 @property (nonatomic, assign) int no;7 @end
2、在其它文件使用这个类,注意:要使用运行时,必须先包含
#import <objc/message.h>
下面,我将会通过一小段代码来获取到这个类中所有的成员变量
#import <objc/message.h>
下面,我将会通过一小段代码来获取到这个类中所有的成员变量
1 unsigned int outCount = 0;2 Ivar *vars = class_copyIvarList([Lender class], &outCount); // 获取到所有的变量列表3 // 遍历所有的成员变量4 for (int i = 0; i < outCount; i++) {5 Ivar ivar = vars[i]; // 取出第i个位置的成员变量6 constchar *propertyName = ivar_getName(ivar); // 通过变量获取变量名7 constchar *propertyType = ivar_getTypeEncoding(ivar); // 获取变量编码类型8 printf("---%s--%s\n", propertyName, propertyType);9 }
打印结果
1 ---height--f2 ---_name--@"NSString"3 ---_age--@"NSNumber"4 ---_no--i
可见,通过这几句简单的代码就可以获取到某个类中所有变量的名称和类型,然后通过object_setIvar()方法为具体某个对象的某个成员变量赋值。
runtime 02-简单使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。