码迷,mamicode.com
首页 > 其他好文 > 详细

runtime 02-简单使用

时间:2014-12-20 00:39:49      阅读:268      评论:0      收藏:0      [点我收藏+]

标签:

runtime机制为我们提供了一系列的方法让我们可以在程序运行时动态修改类、对象中的所有属性、方法。
下面就介绍运行时一种很常见的使用方式,字典转模型。当然,你可能会说,“我用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>
下面,我将会通过一小段代码来获取到这个类中所有的成员变量
 
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--f
2 ---_name--@"NSString"
3 ---_age--@"NSNumber"
4 ---_no--i
可见,通过这几句简单的代码就可以获取到某个类中所有变量的名称和类型,然后通过object_setIvar()方法为具体某个对象的某个成员变量赋值。
 
 

runtime 02-简单使用

标签:

原文地址:http://www.cnblogs.com/chenjungang/p/4174912.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!