//一. 本地持久化

    //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,归档---学习笔记二的更多相关文章

  1. Centos7——docker持久化存储和卷间状态共享(笔记)

    docker持久化存储和卷间状态共享(笔记)  本章介绍 存储卷的介绍 存储卷的两种类型 宿主机好额容器之间如何共享数据 容器之间如何共享数据 存储卷的声明周期 存储卷之间的数据管理和控制模式 就像在 ...

  2. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  3. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  4. Redis学习笔记二 (BitMap算法分析与BitCount语法)

    Redis学习笔记二 一.BitMap是什么 就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身.我们知道8个bit可以组成一个Byte,所以bitmap本身会极大的节省 ...

  5. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

  6. Django学习笔记二

    Django学习笔记二 模型类,字段,选项,查询,关联,聚合函数,管理器, 一 字段属性和选项 1.1 模型类属性命名限制 1)不能是python的保留关键字. 2)不允许使用连续的下划线,这是由dj ...

  7. Linux内核学习笔记二——进程

    Linux内核学习笔记二——进程   一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器 ...

  8. muduo学习笔记(二)Reactor关键结构

    目录 muduo学习笔记(二)Reactor关键结构 Reactor简述 什么是Reactor Reactor模型的优缺点 poll简述 poll使用样例 muduo Reactor关键结构 Chan ...

  9. python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法

    python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...

随机推荐

  1. SVN源码泄露漏洞

    SVN(subversion)是源代码版本管理软件,造成SVN源代码漏洞的主要原因是管理员操作不规范.“在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息 ...

  2. 什么时候用Application的Context,什么时候用Activity的Context

    单例模式用application的context 如果我们在Activity A中或者其他地方使用Foo.getInstance()时,我们总是会顺手写一个『this』或者『mContext』(这个变 ...

  3. Activity源码简要分析总结

    Activity源码简要分析总结 摘自参考书籍,只列一下结论: 1. Activity的顶层View是DecorView,而我们在onCreate()方法中通过setContentView()设置的V ...

  4. Android 友盟分享躺过的几个坑,大坑,坑爹啊

    前言:公司上线了一个项目,做Android 客户端集成友盟分享,在做得过程中,遇到了下面3个问题,希望其他小伙伴注意. ) 错误1: 1.错误描述 我是照着友盟的集成文档一步一步的集成的,做完后,发现 ...

  5. 【读书笔记】iOS-数据交换格式

    数据交换格式主要分为:纯文本格式,XML格式和JSON格式. 一,XML数据交换格式. 多年来,一直在各种计算机语言之间使用.它是老牌的,经典的,灵活的数据交换方式. 1,文档结构. 2,XML文档解 ...

  6. MojoDatabase 源码学习之对象映射

    Mojo-database是我个人比较喜欢多开源项目,下文是该项目打介绍和地址: mojo-database 简介: MojoDatabase is an ActiveRecord-like ORM ...

  7. yii2 gridview 是否显示某列案例

    作者:白狼 出处:http://www.manks.top/article/yii2_gridview_visible 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...

  8. 持续集成 .Net手册--提升开发效率和质量

    参考:http://blog.csdn.net/chelsea/article/details/132525 持续集成 .Net手册 一.概念 Martin Fowler的文章:Continuous ...

  9. What every programmer should know about memory 笔记

    What every programmer should know about memory, Part 1(笔记) 每个程序员都应该了解的内存知识[第一部分] 2.商用硬件现状      现在硬件的 ...

  10. Proactor VS Reactor

    proactor vs reactor 先发几本proactor 与 reactor 相关的电子书: http://files.cnblogs.com/files/f1194361820/reacto ...