Objective-C数据保存和读取
一、NSCoding协议中的Archiving和Unarchiving
(1)Archiving一个object,会记录这个对象的所有的properties到filesystem;
(2)Unarchiving一个object,会从data中重新创建这个object。
类中的实例要Archiving和Unarchiving,需遵守NSCoding协议,要实现以下两个方法:
@protocol NSCoding -(void)encodeWithCoder:(NSCoder*)aCoder; -(instancetype)initWithCoder:(NSCoder*)aCoder; @end
例:
//存
-(void)encodeWithCoder:(NSCoder*)aCoder{
[aCoder encodeObject:self.itemName forKey:@"itemName"];
[aCoder encodeInt:self.valueInDollars forKey:@"valueInDollars"];
}
//取
-(instancetype)initWithCoder:(NSCoder*)aCoder{
self = [super init];
if(self){
_itemName = [aDecoder decodeObjectForKey:@"itemName"];
_valueInDollars = [aDecoder decodeIntForKey:@"valueInDollars"];
}
return self;
}
类似地,
XIB file被保存,即是把views archived into XIB file;
当应用程序启动时,从XIB file里unarchive the views。
二、使用NSCoder的子类在sandbox中存取
应用程序的sandbox是一个目录,包括:Documents、Library(不会在应用程序退出时删除)、tmp(会在应用程序退出时删除)。
NSCoder的子类,这里指:NSKeyedArchiver和NSKeyedUnArchiver这两个类。
例:
//生成file path
-(NSString *)itemArchivePath {
NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *documentDirectory = [documentDirectories firstObject];
return [ documentDirectory stringByAppendingPathComponent:@"items.archive"];
}
//存
-(BOOL)saveChanges {
NSString *path = [self itemArchivePath];
return [NSKeyedArchiver archiveRootObject:XXX toFile:path];
}
//取
-(instancetype)initPrivate {
self = [super init];
if(self){
NSString *path = [self itemArchivePath];
_privateItem = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
}
return self;
}
NSKeyedArchiver存对象的过程分为两步:(1)先调用encodeWithCoder来encode变量到NSKeyedArchiver;(2)再存到path。
三、用NSData写入FileSystem
例:
-(NSString*)imagePathForKey:(NSString*)key{
NSArray *documentDirectories =....;
NSString *documentDirectory = ...;
return [documentDirectory stringByAppendingPathComponent:key];
}
//写入
NSString *imagePath = [self imagePathForKey:key];
NSData *data = UIImageJPEGRepresentation(image,0.5);
[data writeToFile:imagePath automically:YES];
//删除
[[NSFileManager defaultManager] removeItemAtPath:imagePath error:nil];
//读取
UIImage *image = [UIImage imageWithContentOfFile:imagePath];
其中NSFileManager可以获取、创建、拷贝以及移动文件和目录。
Objective-C数据保存和读取的更多相关文章
- C# 结构体和List<T>类型数据转Json数据保存和读取
C# 结构体和List<T>类型数据转Json数据保存和读取 一.结构体转Json public struct FaceLibrary { public string face_name ...
- Numpy之数据保存与读取
在pandas使用的25个技巧中介绍了几个常用的Pandas的使用技巧,不少技巧在机器学习和深度学习方面很有用处.本文将会介绍Numpy在数据保存和读取方面的内容,这些在机器学习和深度学习方向也大 ...
- Java+MySql图片数据保存与读取的具体实例
1.创建表: drop table if exists photo;CREATE TABLE photo ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ...
- C/C++语言之由数字26引起的文件的数据保存与读取调试。
首先在VS2010中遇到的问题是,建立了一个结构体 struct position{ int x; int y; }: 然后用此结构体声明一个数组rout[8]; for(int i=0;i<8 ...
- [MISS静IOS开发原创文摘]-AppDelegate存储全局变量和 NSUserDefaults standardUserDefaults 通过模型保存和读取数据,存储自定义的对象
由于app开发的需求,需要从api接口获得json格式数据并保存临时的 app的主题颜色 和 相关url 方案有很多种: 1, 通过AppDelegate保存为全局变量,再获取 2,使用NSUSerD ...
- Python中数据的保存和读取
在科学计算的过程中,往往需要保存一些数据,也经常需要把保存的这些数据加载到程序中,在 Matlab 中我们可以用 save 和 lood 函数很方便的实现.类似的在 Python 中,我们可以用 nu ...
- 【转】基本数据持久性(一) 使用plist保存和读取数据
原文网址:http://www.it165.net/pro/html/201309/7170.html 想保存成绩.记录得分.保存账号密码等等?数据持久性可以做到这一点!这篇文章通过简单的程序,来分享 ...
- 2018百度之星开发者大赛-paddlepaddle学习(二)将数据保存为recordio文件并读取
paddlepaddle将数据保存为recordio文件并读取 因为有时候一次性将数据加载到内存中有可能太大,所以我们可以选择将数据转换成标准格式recordio文件并读取供我们的网络利用,接下来记录 ...
- Numpy中数据的常用的保存与读取方法
小书匠 深度学习 文章目录: 1.保存为二进制文件(.npy/.npz) numpy.save numpy.savez numpy.savez_compressed 2.保存到文本文件 numpy. ...
随机推荐
- Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds -----》myeclipse2015
错误:Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds 错误提示就是我们限定了部署的时间导致的错 ...
- 安装学习nginx记录
通过查看nginx目录下的log文件,发现80端口没有权限使用 查找文章发现: netstat -aon|findstr ":80" 有的进程ID占用多了80端口,看监听的端口 启 ...
- 配置SVN、GIT总结
SVN使用说明 svn地址(可以是内网,也可以是外网的):svn://192.168.3.1/xxxhttp://192.168.3.1/xxxhttps://192.168.3.1/xxx 一个sv ...
- MSSQL 查询表空间
1. exec sp_spaceused '表名' (SQL统计数据,大量事务操作后可能不准) 2. exec sp_spaceused '表名', true (更新 ...
- js整理4
异步处理 错误处理 同步 function A() { B(); } function B() { C(); } function C() { throw new Error('something h ...
- iOS--NSTimer设置定时器的两种方法
//方法一: //创建定时器 NSTimer *timer=[NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(next ...
- 【水】基于ege的简单3D模拟
我们模拟从被观察物体射出光线,在眼球焦点交汇,然后打到视网膜上成像 ——足够了吧,剩下的难度应该是普及- 只是有一些常数可以自己调一下,看着顺眼就好 #include <graphics.h&g ...
- event
当一个事件被调用后,它会收到一个参数,第一个参数就是事件对象,事件对象包含type, target, timestamp三个. 类型:事件的名称,例如:点击目标:事件的目标元素时间戳:事件触发的时间
- 封装ajax(二)闭包的形式
(function(){ var $=(function(){ function create(){ if(window.XMLHttpRequest){ var xhr=new XMLHttpReq ...
- java分享第七天-02(读取文件)
一 读取文件 public static void main(String[] args) throws FileNotFoundException, IOException { // 建立File对 ...