一、NSCoding协议中的Archiving和Unarchiving

(1)Archiving一个object,会记录这个对象的所有的properties到filesystem;

(2)Unarchiving一个object,会从data中重新创建这个object。

类中的实例要Archiving和Unarchiving,需遵守NSCoding协议,要实现以下两个方法:

  1. @protocol NSCoding
  2. -(void)encodeWithCoder:(NSCoder*)aCoder;
  3. -(instancetype)initWithCoder:(NSCoder*)aCoder;
  4. @end

例:

  1. //存
  2. -(void)encodeWithCoder:(NSCoder*)aCoder{
  3. [aCoder encodeObject:self.itemName forKey:@"itemName"];
  4. [aCoder encodeInt:self.valueInDollars forKey:@"valueInDollars"];
  5. }
  6.  
  7. //取
  8. -(instancetype)initWithCoder:(NSCoder*)aCoder{
  9. self = [super init];
  10. if(self){
  11. _itemName = [aDecoder decodeObjectForKey:@"itemName"];
  12. _valueInDollars = [aDecoder decodeIntForKey:@"valueInDollars"];
  13. }
  14. return self;
  15. }

类似地,

XIB file被保存,即是把views  archived  into XIB file;

当应用程序启动时,从XIB file里unarchive the views。

二、使用NSCoder的子类在sandbox中存取

应用程序的sandbox是一个目录,包括:Documents、Library(不会在应用程序退出时删除)、tmp(会在应用程序退出时删除)。

NSCoder的子类,这里指:NSKeyedArchiver和NSKeyedUnArchiver这两个类。

例:

  1. //生成file path
  2. -(NSString *)itemArchivePath {
  3. NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
  4. NSString *documentDirectory = [documentDirectories firstObject];
  5. return [ documentDirectory stringByAppendingPathComponent:@"items.archive"];
  6. }
  7.  
  8. //存
  9. -(BOOL)saveChanges {
  10. NSString *path = [self itemArchivePath];
  11. return [NSKeyedArchiver archiveRootObject:XXX toFile:path];
  12. }
  13.  
  14. //取
  15. -(instancetype)initPrivate {
  16. self = [super init];
  17. if(self){
  18. NSString *path = [self itemArchivePath];
  19. _privateItem = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
  20. }
  21. return self;
  22. }
  1. NSKeyedArchiver存对象的过程分为两步:(1)先调用encodeWithCoderencode变量到NSKeyedArchiver;(2)再存到path
    三、用NSData写入FileSystem
    例:
  1. -(NSString*)imagePathForKey:(NSString*)key{
  2. NSArray *documentDirectories =....;
  3. NSString *documentDirectory = ...;
  4. return [documentDirectory stringByAppendingPathComponent:key];
  5. }
  6.  
  7. //写入
  8. NSString *imagePath = [self imagePathForKey:key];
  9. NSData *data = UIImageJPEGRepresentation(image,0.5);
  10. [data writeToFile:imagePath automically:YES];
  11.  
  12. //删除
  13. [[NSFileManager defaultManager] removeItemAtPath:imagePath error:nil];
  14.  
  15. //读取
  16. UIImage *image = [UIImage imageWithContentOfFile:imagePath];
  1. 其中NSFileManager可以获取、创建、拷贝以及移动文件和目录。
  1.  

Objective-C数据保存和读取的更多相关文章

  1. C# 结构体和List<T>类型数据转Json数据保存和读取

    C#  结构体和List<T>类型数据转Json数据保存和读取 一.结构体转Json public struct FaceLibrary { public string face_name ...

  2. Numpy之数据保存与读取

      在pandas使用的25个技巧中介绍了几个常用的Pandas的使用技巧,不少技巧在机器学习和深度学习方面很有用处.本文将会介绍Numpy在数据保存和读取方面的内容,这些在机器学习和深度学习方向也大 ...

  3. Java+MySql图片数据保存与读取的具体实例

    1.创建表: drop table if exists photo;CREATE TABLE photo (    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ...

  4. C/C++语言之由数字26引起的文件的数据保存与读取调试。

    首先在VS2010中遇到的问题是,建立了一个结构体 struct position{ int x; int y; }: 然后用此结构体声明一个数组rout[8]; for(int i=0;i<8 ...

  5. [MISS静IOS开发原创文摘]-AppDelegate存储全局变量和 NSUserDefaults standardUserDefaults 通过模型保存和读取数据,存储自定义的对象

    由于app开发的需求,需要从api接口获得json格式数据并保存临时的 app的主题颜色 和 相关url 方案有很多种: 1, 通过AppDelegate保存为全局变量,再获取 2,使用NSUSerD ...

  6. Python中数据的保存和读取

    在科学计算的过程中,往往需要保存一些数据,也经常需要把保存的这些数据加载到程序中,在 Matlab 中我们可以用 save 和 lood 函数很方便的实现.类似的在 Python 中,我们可以用 nu ...

  7. 【转】基本数据持久性(一) 使用plist保存和读取数据

    原文网址:http://www.it165.net/pro/html/201309/7170.html 想保存成绩.记录得分.保存账号密码等等?数据持久性可以做到这一点!这篇文章通过简单的程序,来分享 ...

  8. 2018百度之星开发者大赛-paddlepaddle学习(二)将数据保存为recordio文件并读取

    paddlepaddle将数据保存为recordio文件并读取 因为有时候一次性将数据加载到内存中有可能太大,所以我们可以选择将数据转换成标准格式recordio文件并读取供我们的网络利用,接下来记录 ...

  9. Numpy中数据的常用的保存与读取方法

    小书匠 深度学习  文章目录: 1.保存为二进制文件(.npy/.npz) numpy.save numpy.savez numpy.savez_compressed 2.保存到文本文件 numpy. ...

随机推荐

  1. 在yii框架中如何连接数据库mongodb

    在文件夹common/config/main_local.php中加入如下代码: <?php return [ 'components' => [ 'mongodb' => [ 'c ...

  2. Linux运维(3年以内)

    1.精通shell编程,熟练应用awk,sed,grep,strace,tcpdump等常用命令; 2.精通windows server,linux,mssql,mysql,熟悉网络,cisco,ju ...

  3. SpringMVC客户端发送json数据时报400错误

    当测试客户端发送json数据给服务器时,找不到响应路径? 原来是参数类型不符,即使是json也要考虑参数的个数和类型 解决:将age请求参数由"udf"改为"3" ...

  4. C#读取XML文件并取值

    1.新建XML文件: <?xml version="1.0" encoding="utf-8" ?> <SystemInfo> < ...

  5. Python爬虫Scrapy框架入门(0)

    想学习爬虫,又想了解python语言,有个python高手推荐我看看scrapy. scrapy是一个python爬虫框架,据说很灵活,网上介绍该框架的信息很多,此处不再赘述.专心记录我自己遇到的问题 ...

  6. mysql远程连接问题

    问题:在服务器里面新安装一个MYSQL数据库,结果在远程电脑连接不上,并提示“服务器连接错误Host 'XXX' is not allowed to connect to this MySQL ser ...

  7. 基于类的命令行notebook的实现

    在看一本书<PYTHON3 面向对象编程> 内容丰富,作作记录. notebook.py __author__ = 'chengang882' import datetime # Stor ...

  8. Javassist 字节码操作

    1.读写字节码 Javassist是用来处理java字节码的类库.字节码保存在二进制文件中称为类文件.每个类文件夹包括一个java类或接口. Javasssist.CtClass这个类是一个类文件的抽 ...

  9. 如何将U盘内文件拷入VMware Linux CentOS6.5虚拟机

    之前在Linux CentOS下安装Oracle这篇随笔中我提到要将下载到的安装文件解压缩 那么,问题来了! 如何把下载到的文件拷入虚拟机中呢? 我是这样做的: 1.将下载到的文件拷入U盘 2.以ro ...

  10. 【JAVA】 Java 连接池的工作原理

    什么是连接?         连接,是我们的编程语言与数据库交互的一种方式.我们经常会听到这么一句话“数据库连接很昂贵“.         有人接受这种说法,却不知道它的真正含义.因此,下面我将解释它 ...