持久化存储——偏好设置,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 ...
随机推荐
- 国内最全最详细的hadoop2.2.0集群的MapReduce的最简单配置
简介 hadoop2的中的MapReduce不再是hadoop1中的结构已经没有了JobTracker,而是分解成ResourceManager和ApplicationMaster.这次大变革被称为M ...
- 虚拟机克隆以后出现“需要整合虚拟机磁盘”的解决方法
问题描述 在虚拟机克隆完毕以后,原始虚拟机提示"需要整合虚拟机磁盘" 在"任务与事件"栏中看到以下信息 解决方法 从上面可以看到是因为整合失败导致的,那么我们只 ...
- tomcat中的JSP引擎
jsp文件解析成class文件过程需要利用tomcat的jasper组件. Jasper是tomcat中使用的JSP引擎,在Tomcat 6中使用的是Jasper 2,相对于原来的版本作了不少的改进, ...
- 浅谈Java五大设计原则之责任链模式
首先我们得先定义一个责任链模式: 责任链模式是一种线性执行流程,多个对象都有机会去执行同一个任务,只是在执行过程中, 由于执行的权利和范围不一样,那么当自己不能处理此任务时,就必须将这个任务抛给下一个 ...
- Xshell与securecrt之间不同
现在比较受欢迎的终端模拟器软件当属xshell和securecrt了,现在就客观的分析一下两款软件,以便更好选择. 一.功能对比1.1Xshell功能 支持布局切换 可调整执行顺序 提供多标签功能 对 ...
- 解决Windows 8系统假死的方法
大部分半卡死的现象是因为Dynamic Tick的一个Bug.Dynamic Tick是NT 6.2内核的一个新功能(其实Linux早就有了),原理的话大概是在空闲的时候把CPU完全暂停,来节省电量. ...
- drop和delete的区别是什么
当你不再需要该表时, 用 drop;当你仍要保留该表,但要删除所有记录时, 用 truncate;当你要删除部分记录时(always with a WHERE clause), 用 delete.
- 项目管理学习笔记之五.沟通协调能力II
二.沟通模型:一个双向交流的过程 沟通模型:编 码---------------->信息-----------------> 解码&歧义发送者 ...
- Oracle BIEE 环境迁移所导致的账号登陆问题的解决
系统版本 系统版本:11G(11.1.1.9) 问题描述 将系统数据(RPD.catalog等数据)迁移到另一环境(版本同样为11G)后,老系统weblogic控制台中添加的账户在新系统(仪表盘)中无 ...
- Mongodb Manual阅读笔记:CH7 索引
7索引 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔记 ...