文档章节

iOS自动化归档

 汉唐盛京
发布于 2017/11/30 10:42
字数 262
阅读 3
收藏 0
- (void)encodeWithCoder:(NSCoder *)encoder {
    //  利用runtime获取实例变量的列表
    [self encodeWithClass:[self class] coder:encoder];
}

- (void)encodeWithClass:(Class)class coder:(NSCoder *)encoder {
    NSString *class_string = NSStringFromClass(class);
    if (![class_string isEqualToString:@"NSObject"]) {
        id obj = [class new];
        [self encodeWithClass:[obj superclass] coder:encoder];
    } else {
        return;
    }
    unsigned int count = 0;
    Ivar *ivars = class_copyIvarList(class, &count);
    for (int i = 0; i < count; i ++) {
        //  取出i位置对应的实例变量
        Ivar ivar = ivars[i];
        //  查看实例变量的名字
        const char *name = ivar_getName(ivar);
        //  C语言字符串转化为NSString
        NSString *nameStr = [NSString stringWithCString:name encoding:NSUTF8StringEncoding];
        //  利用KVC取出属性对应的值
        id value = [self valueForKey:nameStr];
        //  归档
        [encoder encodeObject:value forKey:nameStr];
    }
    //  记住C语言中copy出来的要进行释放
    free(ivars);
}

- (id)initWithCoder:(NSCoder *)decoder {
    if (self = [super init]) {
        [self deCoderWithClass:[self class] coder:decoder];
    }
    return self;
}

- (void)deCoderWithClass:(Class)class coder:(NSCoder *)decoder {
    NSString *class_string = NSStringFromClass(class);
    if (![class_string isEqualToString:@"NSObject"]) {
        id obj = [class new];
        [self deCoderWithClass:[obj superclass] coder:decoder];
    } else return;
    unsigned int count = 0;
    Ivar *ivars = class_copyIvarList(class, &count);
    for (int i = 0; i < count; i ++) {
        Ivar ivar = ivars[i];
        const char *name = ivar_getName(ivar);
        //
        NSString *key = [NSString stringWithCString:name encoding:NSUTF8StringEncoding];
        id value = [decoder decodeObjectForKey:key];
        //  设置到成员变量身上
        [self setValue:value forKey:key];
    }
    free(ivars);
}
参考:http://blog.csdn.net/oqingting12345/article/details/48929491

© 著作权归作者所有

粉丝 0
博文 31
码字总数 6044
作品 0
昌平
程序员
私信 提问
浅谈iOS开发中的对象归档

iOS提供的数据持久化方式有:SQLiteCoreData属性列表、NSUserDefault对象归档。 这里来简单介绍下iOS开发中的对象归档: 对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化...

泊菜
2014/11/27
3.9K
8
10 个免费的移动 App 测试框架 (Android/iOS)

功能测试框架 #1: KIF for iOS KIF 的全称是 Keep It Functional ,来自 Square。该测试框架只支持 iOS,所有测试使用 Objective-C 编写,简化了 App 开发者使用。 #2: Fliptest – iOS 的应...

oschina
2013/09/20
15.4K
5
超好用!5款开源的移动自动化测试工具

如今,移动应用在企业的地位越来越重要,消费者对移动设备的要求也越来越高。为适应这一需求,测试团队必须在移动设备推出市场之前,对其性能进行一系列的评估和测试。然而,这是一个既耗时又...

达尔文
2016/11/11
5.4K
2
iOS应用存储数据的常用的方式之plist和归档

iOS应用创建的数据存储方式 plist文件,是XML属性的列表形式 归档(遵循协议) SQLite(需要自己写sql语句) Core Data 苹果对的一个封装 今天我们先来说说文件,需要知道一个概念 沙盒文件 每一个...

追逐iOS
04/20
0
0
Appium 1.8.0 发布,全面支持 W3C WebDriver 规范

Appium 是一个开源、跨平台的自动化测试工具,最初主要用于测试原生和轻量移动应用,包括 iOS 和 Android ,目前还支持对 Windows 平台上的应用的自动化测试。 Appium 1.8.0 发布,引入了对 ...

王练
2018/04/25
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

优雅的关闭Spring Boot

优雅的关闭Spring Boot 1、实现 TomcatConnectorCustomizer 接口拿到Tomcat的连接获取 Tomcat连接池 2、实现 ApplicationListener<ContextClosedEvent> 监听服务器关闭事件,注册JVM钩子函数...

sowhat
今天
2
0
Python3-Web开发

简介 Web开发框架 什么是Web框架? Web应用程序框架或简单的Web框架表示一组库和模块,使Web应用程序开发人员能够编写应用程序,而不必担心协议,线程管理等低级细节。 virtualenv是一个虚拟...

wuxinshui
今天
3
0
使用技媒体实践编写发布博客

技媒体实践博客 CSDN OSChina 知乎 简书 思否 掘金 51CTO

晨猫
今天
2
0
Lucene

1、什么是全文检索 数据分类 我们生活中的数据总体分为两种:结构化数据和非结构化数据。 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。 非结构化数据:指不定长或无固...

榴莲黑芝麻糊
昨天
5
0
python到setuptools、pip工具的安装

python安装 基础开发库   apt-get install gcc  apt-get install openssl libssl-dev 安装数据库和开发库   apt-get install mysql-server libmysqld-dev python环境   下载地址...

问题终结者
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部