iOS的归档(archive)和解档(unarchive)
2016-01-15 00:00
423 查看
在面向对象的编程中,会涉及到对象的保存,对象的保存在JAVA当中称之为serialize,也叫序列化。而在cocoa当中,这个过程称之为归档。cocoa当中最最典型的序列化例子就是NIB文件的保存和读取过程。
在cocoa当中如何实现了这个功能的哪?
其实在cocoa当中是通过了NSCoding协议和NSCoder抽象类共同实现的,对于NSCoder抽象类而言,其实他只是一个抽象类,是不能实例化使用的,而真正使用的是NSCoder的子类,即NSArchiver, NSUnarchiver, NSKeyedArchiver, NSKeyedUnarchiver类的实例对象。
那么实现的关键点有两点:
1、要使的需要存储的对象实现NSCoding协议,从而使他自己满足写二进制数据的能力。即是自己具有序列化的能力。
2、使用NSCoder的子类方法,实现二进制数据的动作,如读或者写。即触发存档过程。
需要注意的一点就是说,其实对于序列化,是一个“一传十,十传百”的过程,父类的序列化,会逐层递归的将所有的子对象也进行了序列化。此外,序列化,能够序列化的是对象实例和类名,而对于方法其实是无法序列化的,因此对于序列化和非序列化的类,都需要使用共同的类定义,否则无法还原。
NSCoding协议的方法:
-(id)initWithCoder:(NSCoder *)coder; // 读取coder中的数据
-(void) encodeWithCoder:(NSCoder*)coder;// 向coder中写入数据
NSKeyArchiver的方法
+(NSData*)archivedDataWithRootObject:(id)rootObject
在cocoa当中如何实现了这个功能的哪?
其实在cocoa当中是通过了NSCoding协议和NSCoder抽象类共同实现的,对于NSCoder抽象类而言,其实他只是一个抽象类,是不能实例化使用的,而真正使用的是NSCoder的子类,即NSArchiver, NSUnarchiver, NSKeyedArchiver, NSKeyedUnarchiver类的实例对象。
那么实现的关键点有两点:
1、要使的需要存储的对象实现NSCoding协议,从而使他自己满足写二进制数据的能力。即是自己具有序列化的能力。
2、使用NSCoder的子类方法,实现二进制数据的动作,如读或者写。即触发存档过程。
需要注意的一点就是说,其实对于序列化,是一个“一传十,十传百”的过程,父类的序列化,会逐层递归的将所有的子对象也进行了序列化。此外,序列化,能够序列化的是对象实例和类名,而对于方法其实是无法序列化的,因此对于序列化和非序列化的类,都需要使用共同的类定义,否则无法还原。
NSCoding协议的方法:
-(id)initWithCoder:(NSCoder *)coder; // 读取coder中的数据
-(void) encodeWithCoder:(NSCoder*)coder;// 向coder中写入数据
NSKeyArchiver的方法
+(NSData*)archivedDataWithRootObject:(id)rootObject
相关文章推荐
- 学习ios思想
- iOS 字符串常用判定库
- [转]IOS启动图以及应用图标
- Cocoapods安装问题
- 使用Xcode 7 beta免费真机调试iOS应用程序
- iOS 硬件授权检测:定位服务、通讯录、日历、提醒事项、照片、蓝牙共享、麦克风、相机等(转)
- IOS学习【xcode 7新特性url链接】
- IOS学习【xcode 7新特性url链接】
- iOS多线程之GCD学习
- iOS超级简单地16进制颜色转换
- IOS学习【VMware 12 安装 Mac OS X 10.11】-Day1
- IOS远程推送证书的制作步骤
- IOS学习【VMware 12 安装 Mac OS X 10.11】-Day1
- ios 左右抖动效果
- iOS开发中崩溃分析-BugHD的使用
- 蓝懿ios技术交流和心得分享16.1.14
- IOS学习【前言】
- IOS学习【前言】
- ios多线程
- iOS 移动设备处理器指令集 armv6、armv7、armv7s及arm64