通过运行时将Model转成字典输出

或许我们会有一些这样的场景,定义一个Model类来临时存储一些数据,然后稍后再把这些数据组织成 Dictionary,再做其他用途。

可以通过运行时机制 获取类的PropertyList,然后根据 其中的某个Property找到对应的iVar,通过ivar 获取到对应的值。通过属性名作为字典键值,iVar值作为value付给Dic,至此结束。

- (NSDictionary *)dicSerializeObject
{
    NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithCapacity:5];

    NSString *className = NSStringFromClass([self class]);
    id class = objc_getClass([className UTF8String]);

    // 获取类中的property
    unsigned int propertyCount;
    objc_property_t *properties = class_copyPropertyList(class, &propertyCount);

    for (unsigned int i = 0; i < propertyCount; i++)
    {
        objc_property_t property = properties[i];
        const char *cPropertyName = property_getName(property);

        // 得到属性名
        NSString *propertyName = [NSString stringWithCString:cPropertyName encoding:NSUTF8StringEncoding];

        // 获取实例变量
        Ivar ivar = class_getInstanceVariable([self class], cPropertyName);
        if (ivar == nil)
        {
            ivar = class_getInstanceVariable([self class], [[NSString stringWithFormat:@"_%@", propertyName] UTF8String]);
        }

        // 赋值
        if(ivar != nil)
        {
            id propertyValue = object_getIvar(self, ivar);

            if (propertyValue)
            {
                [dictionary setObject:propertyValue forKey:propertyName];
            }
        }
    }

    free(properties);

    return dictionary;
}

 将这个方法定义实现在NSObject的Category中,即可方便使用。

还看到这一篇博客(JSON转Model思路):http://ios.jobbole.com/82975/

时间: 2024-08-19 14:45:33

通过运行时将Model转成字典输出的相关文章

运行时(iOS)

运行时(iOS) 一.什么是运行时(Runtime)? 运行时是苹果提供的纯C语言的开发库(运行时是一种非常牛逼.开发中经常用到的底层技术) 二.运行时的作用? 能获得某个类的所有成员变量 能获得某个类的所有属性 能获得某个类的所有方法 交换方法实现 能动态添加一个成员变量 能动态添加一个属性 能动态添加一个方法 三.案例:运行时获取成员变量名称 1.分析 #import <Foundation/Foundation.h> #import "XMGPerson.h" #im

iOS开发——高级技术OC篇&amp;运行时(Runtime)机制

运行时(Runtime)机制 本文将会以笔者个人的小小研究为例总结一下关于iOS开发中运行时的使用和常用方法的介绍,关于跟多运行时相关技术请查看笔者之前写的运行时高级用法及相关语法或者查看响应官方文档. 下面就来看看什么是运行时,我们要怎么在iOS开发中去使用它. 官方介绍: 这里我们主要关注的是最后一种! 下面来看看Runtime的相关总结 #pragma mark 获取属性成员 /********************************************************

KVO运行时

#import "CZNews.h" #import <objc/runtime.h>//**************一定要引入这个头文件************* @implementation CZNews +(instancetype)CZNewsWithDict:(NSDictionary *)dict { CZNews *model = [[CZNews alloc] init]; // 在实际的开发中,字典数据往往比模型数据的属性要多很多. // 这个时候,如果

iOS运行时Runtime浅析

运行时是iOS中一个很重要的概念,iOS运行过程中都会被转化为runtime的C代码执行.例如[target doSomething];会被转化成objc)msgSend(target,@selector(doSomething))来执行.这篇博客会较为全面的来讲解下Runtime. OC是一门动态语言,它将很多静态语言在编译和链接时做的事放到了运行时来处理.这种动态语言的优势在于:写代码能更加灵活,可以把消息转发给想要的对象,或者随意交换一个方法的实现. OC Runtime目前有两个版本:M

公共语言运行时 CLR

公共语言运行时(Common Language Runtime,CLR)是处于.NET核心Framework的面向对象引擎,其将各种语言编译器生成的中间代码翻译为执行应用程序所需的原生码(Native Code). 由于CLR将所有代码转换成公共的交互式语言,之后被编译成原生码.所以,从原则而言,.NET可以在Unix.Linux.Mac OS X或其他操作系统上实现. CLR在Web服务器上执行程序.CLR激活对象,对它们进行安全检查,在内存中创建它们,执行它们,并且进行垃圾回收.

《转》.NET开源核心运行时,且行且珍惜

转载自infoQ 背景 InfoQ中文站此前报道过,2014年11月12日,ASP.NET之父.微软云计算与企业级产品工程部执行副总裁Scott Guthrie,在Connect全球开发者在线会议上宣布,微软将开源全部.NET核心运行时,并将.NET 扩展为可在 Linux 和 Mac OS 平台上运行..NET核心运行时将基于MIT开源许可协议发布,其中将包括执行.NET代码所需的一切项目——CLR.JIT编译器.垃圾收集器(GC)和核心.NET基础类库.此外,微软还发布了Visual Stu

C Runtime C运行时

顾名思义,C运行时是C程序运行时的环境,简称CRT C运行时主要包括以下几个部分: 1)引导程序(main)的入口函数和退出函数以及其依赖的各种函数 2)C的标准函数的实现 3)I/O功能的封装和实现 4)堆的封装和实现 5)C语言的特殊功能的实现 6)调试功能 7)其他 运行时(Runtime)是平台相关的,这里的平台指的是操作系统 它可以被理解成是C语言程序和不同操作系统平台的抽象层 * 并不是所有的C程序的操作都必须经由CRT实现 * CRT中并不都是C语言定义的操作

【特种兵系列】编译时与运行时

在开发和设计的时候,我们需要考虑编译时,运行时以及构建时这三个概念.理解这几个概念可以更好地帮助你去了解一些基本的原理.下面是初学者晋级中级水平需要知道的一些问题. Q.下面的代码片段中,行A和行B所标识的代码有什么区别呢? public class ConstantFolding { static final int number1 = 5; static final int number2 = 6; static int number3 = 5; static int number4= 6;

Android运行时ART加载OAT文件的过程分析

在前面一文中,我们介绍了Android运行时ART,它的核心是OAT文件.OAT文件是一种Android私有ELF文件格式,它不仅包含有从DEX文件翻译而来的本地机器指令,还包含有原来的DEX文件内容.这使得我们无需重新编译原有的APK就可以让它正常地在ART里面运行,也就是我们不需要改变原来的APK编程接口.本文我们通过OAT文件的加载过程分析OAT文件的结构,为后面分析ART的工作原理打基础. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! OAT文件