持久化存储——偏好设置,plist,归档---学习笔记二
//一. 本地持久化 //1.沙盒 //1.1 应用程序包:存放的是应用程序的源文件,包括资源文件和可执行文件 NSString *path = [[NSBundle mainBundle]bundlePath]; //1.2 Documents:最常用的目录,iTunes同步该应用时会同步此文件夹中的内容,适合存储重要数据 NSString *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES).firstObject; //1.3 Library //1.3.1 Caches:iTunes不会同步此文件夹,适合存储体积大,不需要备份的非重要数据。 NSString *cachs = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject; //1.4 Preferences:iTunes同步该应用时会同步此文件夹中的内容,通常保存应用的设置信息。 //1.5 tmp: iTunes不会同步此文件夹,系统可能在应用没运行时就删除该目录下的文件,所以此目录适合保存应用中的一些临时文件,用完就删除。 NSString *tmpPath = NSTemporaryDirectory(); //---打印的地址,前往->前往文件夹->输入//Users/xingzai/Library/Developer 就可以进入到当前文件夹下 //二 . Plist 存储 //2.1 plist文件是将某些特定的类,通过XML文件的方式保存在目录中。 //可以被序列化的类型只有如下几种 //-----根目录 //NSArray;//数组 //NSDictionary;//字典 //-----子属性 //NSArray;//数组 //NSDictionary;//字典 // NSMutableArray;//可变数组 // NSMutableDictionary;//可变字典 // NSData;//二进制数据 // NSMutableData;//可变二进制数据 // NSString;//字符串 // NSMutableString;//可变字符串 // NSNumber;//基本数据 // NSDate;//日期 //2.2 下面以数组为例 //2.2.1存储 NSString *plistPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject; NSArray *arr = @[@{@"":@"num"},@{@"":@"num"},@{@"":@"num"},@{@"":@"num"},@{@"":@"num"}]; //stringByAppendingPathComponent是到目录下/,如a/ [arr writeToFile:[plistPath stringByAppendingPathComponent:@"1.plist"] atomically:YES]; //stringByAppendingString 是和当前目录平级的,和a共处一个目录里 // [arr writeToFile:[plistPath stringByAppendingString:@"1.plist"] atomically:YES]; //2.2.2 取 NSArray *contentArray = [NSArray arrayWithContentsOfFile:[plistPath stringByAppendingPathComponent:@"1.plist"]]; NSLog(@"%@",contentArray); //三. Preference(偏好设置) // 偏好设置是专门用来保存应用程序的配置信息的,一般不要在偏好设置中保存其他数据。 // 偏好设置是以key-value的方式进行存储和读写,使用到一个单例对象NSUserDefaults //存 NSUserDefaults *keyDefault = [NSUserDefaults standardUserDefaults]; [keyDefault setObject:@"xingZai" forKey:@"name"]; [keyDefault setBool:YES forKey:@"sex"]; [keyDefault setInteger: forKey:@"age"]; //立即同步 [keyDefault synchronize]; //取 NSString *name = [keyDefault objectForKey:@"name"]; NSInteger age = [keyDefault integerForKey:@"age"]; BOOL sex = [keyDefault boolForKey:@"sex"]; //oc 的BOOL用%d表示,c的bool用%s表示, NSLog(@"name = %@ age =%ld sex=%d",name,age,sex); // 如果没有调用synchronize方法,系统会根据I/O情况不定时刻地保存到文件中。所以如果需要立即写入文件的就必须调用synchronize方法。 // 偏好设置会将所有数据保存到同一个文件中,使用同一个key进行存储数据,会覆盖之前存储的数据。 //四 、归档与解档 // 归档在iOS中是另一种形式的序列化,只要遵循了NSCoding协议的对象都可以通过它实现序列化。由于绝大多数支持存储数据的类都遵循了NSCoding协议,因此,对于大多数类来说,归档相对而言还是比较容易实现的。 // 1. 遵循NSCoding协议 // NSCoding协议声明了两个方法,这两个方法都是必须实现的: // encodeWithCoder:用来说明如何将对象编码到归档中。 // initWithCoder:用来说明如何进行解档来获取一个新对象。 // @interface Student : NSObject<NSCoding> // // @property (nonatomic, copy) NSString *name; //名字 // @property (nonatomic, assign) BOOL sex; //性别,NO 为女,YES为男 // @property (nonatomic, assign) NSInteger age; //年龄 // // // @end //#import "Student.h" // // @implementation Student // // //解档 ( decoder 解码器;译码员) // - (instancetype)initWithCoder:(NSCoder *)aDecoder{ // // if (self = [super init]) { // self.name = [aDecoder decodeObjectForKey:@"name"]; // self.sex = [aDecoder decodeBoolForKey:@"sex"]; // self.age = [aDecoder decodeIntegerForKey:@"age"]; // } // return self; // } // //归档 (aCoder 归档) // - (void)encodeWithCoder:(NSCoder *)aCoder{ // [aCoder encodeObject:self.name forKey:@"name"]; // [aCoder encodeBool:self.sex forKey:@"sex"]; // [aCoder encodeInteger:self.age forKey:@"age"]; // } // @end //2. NSKeyedArchiver归档 // 调用NSKeyedArchiver的archiveRootObject:toFile:方法把对象归档 NSString *keyPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject; NSString *file = [keyPath stringByAppendingPathComponent:@"student.data"]; Student *student = [[Student alloc] init]; student.name = @"五宝"; student.sex = YES; student.age = ; BOOL isSuccess = [NSKeyedArchiver archiveRootObject:student toFile:file]; if (isSuccess) { NSLog(@"写入成功"); } //3. NSKeyedUnarchiver 解档 // 调用 NSKeyedUnarchiver unarchiveObjectWithData: 取出相应的数据 NSString *unkeyPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject; NSString *unfile = [unkeyPath stringByAppendingPathComponent:@"student.data"]; Student *unStudent = [NSKeyedUnarchiver unarchiveObjectWithFile:unfile]; if (unStudent) { self.students = unStudent; // self.students.name = unStudent.name; // self.students.sex = unStudent.sex; // self.students.age = unStudent.age; NSLog(@"unStudent:name=%@ sex=%d age=%ld",self.students.name,self.students.sex,self.students.age); }
持久化存储——偏好设置,plist,归档---学习笔记二的更多相关文章
- Centos7——docker持久化存储和卷间状态共享(笔记)
docker持久化存储和卷间状态共享(笔记) 本章介绍 存储卷的介绍 存储卷的两种类型 宿主机好额容器之间如何共享数据 容器之间如何共享数据 存储卷的声明周期 存储卷之间的数据管理和控制模式 就像在 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- NumPy学习笔记 二
NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- Redis学习笔记二 (BitMap算法分析与BitCount语法)
Redis学习笔记二 一.BitMap是什么 就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身.我们知道8个bit可以组成一个Byte,所以bitmap本身会极大的节省 ...
- Java IO学习笔记二
Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...
- Django学习笔记二
Django学习笔记二 模型类,字段,选项,查询,关联,聚合函数,管理器, 一 字段属性和选项 1.1 模型类属性命名限制 1)不能是python的保留关键字. 2)不允许使用连续的下划线,这是由dj ...
- Linux内核学习笔记二——进程
Linux内核学习笔记二——进程 一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器 ...
- muduo学习笔记(二)Reactor关键结构
目录 muduo学习笔记(二)Reactor关键结构 Reactor简述 什么是Reactor Reactor模型的优缺点 poll简述 poll使用样例 muduo Reactor关键结构 Chan ...
- python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法
python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...
随机推荐
- ios7 tableview被navigationbar挡住
用ego下拉刷新的时候,每次在ios7时,tableview都会上移...导致被navagationbar挡住.ios6是正常的,于是在init的时候添加如下代码... NSComparisonRes ...
- git使用详细介绍
1. Git概念 1.1. Git库中由三部分组成 Git 仓库就是那个.git 目录,其中存放的是我们所提交的文档索引内容,Git 可基于文档索引内容对其所管理的文档进行内容追踪,从而 ...
- android studio我的习惯操作
一.修改字体 点击左上角File选择settings....进入界面选择Editor-->Colors&Fonts-->Font点击界面中Save As...在对话框中输入名字点击 ...
- objective-c系列-NSArray
OC数组NSArray 对比 c数组 和 oc数组对象(指针) 定义 int array[10]; NS ...
- 【代码笔记】iOS-屏幕旋转
代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. se ...
- OC 中的block存储位置
以下所有在ARC情况下: 一.block块的存储位置(block块入口地址):可能存放在2个地方:代码区.堆区(程序分5个区,还有常量区.全局区和栈区,对于MRC情况下代码还可能存在栈区.关于分区详细 ...
- iOS 学习 - 13.微信分享链接、QQ 分享图片
准备工作---原文来自这个 首先要在微信开放平台申请 AppID 和 QQ ID(我第一天晚上申请的,第二天中午就通过了),接着导入 SDK,也就是3个 .h 和一个 .a 文件,详情见这里 如果你是 ...
- IOS开发之功能模块--给任意的UIView添加点击事件
前言:好久没写博客,今天来一波.我在实际项目开发中,会遇到这样功能需求:我已经搭好了iOS的UI界面,但是很多界面的子View用了UIView,然后这些UIView中用了UILabel和UIImage ...
- windows下最好的豆瓣fm软件——K.F.storm豆瓣电台,没有之一
哈哈,发现windows下最好的豆瓣电台啦~~~基本全部功能都能满足哈,绝对没有之一的软件--K.F.storm豆瓣电台. 官方地址: http://www.kfstorm.com/blog/doub ...
- 1.3 基础知识——GP2.1 方针(Policy)
摘要: 方针这个GP每个PA都有,其实CMMI实践有没有实在价值,就在于方针!如果我们做出来的CMMI实践仅仅就是写文档.多步骤.没事找事,那其实就是违背了公司的商业目标,公司的商业目标简单说就是:用 ...