ios runtime 自动解归档

在正常项目中,需要将模型model本地化存储就必须用到解归档,解归档需要将模型中的所有的属性都一一写一遍非常麻烦,可以通过runtime快速完成自动解归档操作。

    // 归档
    func encode(with aCoder: NSCoder) {
        var c = self.classForCoder
        while c != NSObject.self {
            var count: UInt32 = 0
            // 获得class中所有属性
            guard let ivars = class_copyIvarList(c, &count) else { return }
            for i in 0..<count {
                let key = NSString(utf8String: ivar_getName(ivars[Int(i)])!)! as String
                let value = self.value(forKey: key)
                aCoder.encode(value, forKey: key)
            }
            // 获得父类
            c = c.superclass()!
            // 释放
            free(ivars)
        }
    }
    // 解归档
    required init?(coder aDecoder: NSCoder) {
        super.init()
        var c = self.classForCoder
        while c != NSObject.self {
            var count: UInt32 = 0
            // 获得class中所有属性
            guard let ivars = class_copyIvarList(c, &count) else { return }
            for i in 0..<count {
                let key = NSString(utf8String: ivar_getName(ivars[Int(i)])!)! as String
                let value = aDecoder.decodeObject(forKey: key)
                self.setValue(value, forKey: key)
            }
            // 获得父类
            c = c.superclass()!
            // 释放
            free(ivars)
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,825评论 1 32
  • leader选举 目标 :确保所以log的entry 传送方向是: leader -> follower策略:选出...
    娄云阅读 2,732评论 0 0
  • 简屋寒舍寒屋俭, 险山石寨石山现, 半掩柴门柴烟伴,唤犬归巢归犬欢。
    灿烂阳光王星宇阅读 2,870评论 11 20
  • 第二次在线视频为湖北山区的孩子们上画画课 ,孩子们的画画没有很好的基础,线条画的不是很流畅,但是孩子们画画很用心,...
    燕zi阅读 2,662评论 1 3
  • 这几天孩子特别依赖我,总是不停的亲亲我,还说自己是皮搋子,要和妈妈亲一亲,之前早课我会到另外一个卧室,自从孩子光着...
    小蜗牛_b104阅读 1,371评论 1 2