运行时解档和归档的使用

什么是运行时呢??
OC是运行时语言,只有在程序运行时,才会去确定对象的类型,并调用类与对象相应的方法。利用runtime机制让我们可以在程序运行时动态修改类、对象中的所有属性、方法。
运行时是oc消息机制的平台,例如函数的调用,在编译的时候并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名称找到对应的函数来调用。
使用场景包括动态添加对象的成员变量、多态、方法交换等。开发中常用的运行时几个的方法:运行时机制。我们一般在开发中使用的比较多的就三个方法。第一个就是动态获取属性。第二个就是动态为分类添加属性。第三个就是俗称黑魔法的替换方法。也就是在编译的过程中就将系统或者分类的方法替换成我们想要的方法。

运行时归档解档还是蛮方便的啦~~


#pragma mark
#pragma mark - 归档存储
- (void)encodeWithCoder:(NSCoder *)aCoder{
    //获取当前类
    Class cls = [self class];
    unsigned int ivarsCnt = 0;
    
    //获取类成员的变量,ivasCnt 指的是成员的变量
    Ivar * ivars = class_copyIvarList(cls, &ivarsCnt);
    
    //变量成员变量列表,每个成员变量都是Ivar 类型的结构体
    for (int i = 0; i <ivarsCnt; i++) {
        
    //获取变量名
        Ivar var = ivars[i];
        const char * name = ivar_getName(var);

        NSString * key = [NSString stringWithUTF8String:name];
    //获取变量的值
        id value = [self valueForKey:key];
        
        //归档
        [aCoder encodeObject:value forKey:key];

    }
}

#pragma mark
#pragma mark - 解档
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
    if (self = [super init]) {
        //获取当前类
        Class cls = [self class];
        unsigned int ivarsCnt = 0;
        //获取成员变量,ivarsCnt就是成员变量
        Ivar * ivars = class_copyIvarList(cls, &ivarsCnt);
        
        //遍历成员变量,每个成员便令都是Ivar 类型的结构体
        for (int i = 0 ; i < ivarsCnt; i++) {
           
        //获取变量名
            Ivar var = ivars[i];
            const  char * name = ivar_getName(var);
            NSString * key = [NSString stringWithUTF8String:name];
            
            //获取变量值,解档出来的值
            id value = [aDecoder decodeObjectForKey:key];
            
            [self setValue:value forKey:key];
        }
    }
    return self;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 8,199评论 0 27
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,017评论 6 13
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 2,177评论 0 9
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,736评论 30 472
  • 很多时候我们思考一件事情,总是会执着于某个方向。 执着是件好事,但是如果是错误的方向,那么我们就很容易陷入各种思考...
    我是荷叶田田阅读 391评论 0 1

友情链接更多精彩内容