zoukankan      html  css  js  c++  java
  • iOS学习之应用数据存储1-属性列表、偏好设置、NSKeyedArchiver归档

    iOS应用数据存储的常用方式(持久化方式)

    1. 属性列表(plist)归档(XML文件)
    2. Preference(偏好设置)
    3. NSKeyedArchiver归档(NSCoding)
    4. SQLite3
    5. Core Data
      1. 属性列表(plist)归档(XML文件)
    6. 属性列表是一种XML格式的文件,拓展名为plist。
    7. 如果对象是NSString、NSDictionary、NSArray、NSData、NSNumber等类型,就可以使用writeToFile:atomically:方法直接将对象写到属性列表文件中。

    将一个NSDictionary对象归档到一个plist属性列表中

    // 将数据封装成字典

    NSMutableDictionary *dict = [NSMutableDictionary dictionary];

    [dict setObject:@"阿三" forKey:@"name"];

    [dict setObject:@"18959222222" forKey:@"phone"];

    [dict setObject:@"20" forKey:@"age"];

    1. 将字典持久化到Documents/stu.plist文件中(写入)[dict writeToFile:path atomically:YES];

    成功写入到Documents目录下

    2.读取字典属性列表路径的两种方法:

    1).构造函数:

    dict=[NSMutableDictionary alloc]initWithContentsOfFile: path];

    2).静态创建工厂方法:

    dict=[NSMutableDictionary dictionaryWithContentsOfFile: path];

    读取数据

    NSLog(@"name:%@", [dict objectForKey:@"name"]);

    NSLog(@"phone:%@", [dict objectForKey:@"phone"]);

    NSLog(@"age:%@", [dict objectForKey:@"age"]);

      1. Preference(偏好设置)

    1iOS应用都可以通过偏好设置来快速保存用户登陆账号,密码和登陆状态等等信息。

    2、苹果提供了一个NSUserDefaults实例,通过它来存取偏好设置。保存格式为plist文件格式。

    3、使用偏好设置来保存数据, 默认存储在Preferences的文件夹下,偏好设置数据会将所有的数据都保存到Preferences的文件夹下的同一个plist文件中。

    4、使用偏好设置对数据进行保存, 它保存的时间是不确定的,会在将来某一时间自动将数据保存到Preferences文件夹下,如果需要即刻将数据存储,使用[defaults synchronize]

    1.保存偏好设置数据

    // 获取NSUserDefaults对象

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    // 保存数据[defaults setObject:@" 阿三" forKey:@" name "];

    [defaults setInteger:23 forKey:@" age"];

        [defaults setDouble:1.73f forKey:@"height"];

    // 强制让数据立刻保存[defaults synchronize]; 

    2.读取偏好设置数据

    // 获取NSUserDefaults对象

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    // 读取数据

    NSString *test = [defaults objectForKey:@" name "];

      NSInteger age=[defaults integerForKey:@"age"];

        double height=[defaults doubleForKey:@"height"];

      1. NSKeydeArchiver归档
    1. 保存在Document文件夹
    2. 前面两种方式只能保存plist支持的基本数据类型,那么要保存自定义的类对象,苹果提供了NSKeydeArchiver归档。
    3. 使用NSKeydeArchiver归档必须使被归档的类遵守NSCoding协议并且实现协议方法。

    @interface Person : NSObject <NSCoding>

    // 当一个对象要保存到文件中的时候回调用如下方法,所以重写该方法,说明保存该对象的时候要保存哪些属性。

    - (void)encodeWithCoder:(NSCoder *)aCoder {

    [aCoder encodeObject:self.name forKey:@"name"];

    [aCoder encodeInteger:self.age forKey:@"age"];

    [aCoder encodeDouble:self.height forKey:@"height"];

    }

    // 当一个对象从文件中读取的时候,系统会调用该方法,重写该方法

    - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {

    if ([super init]) {

        self.name = [aDecoder decodeObjectForKey:@"name"];

        self.age = [aDecoder decodeIntForKey:@"age"];

    self.height = [aDecoder decodeDoubleForKey:@"height"];

    }

    return self;

    }

    //将自定义的对象保存到文件中

    [NSKeyedArchiver archiveRootObject:p1 toFile:path];

    // 读取数据

    Person *p2 =[NSKeyedUnarchiver unarchiveObjectWithFile:path];

    通过NSKeydeArchiver保存的数据的文件后缀名可以任意命名,并且通过plist保存的数据是直接显示出来的,不安全。通过归档方法保存的数据在文件中打开是编码,更安

     

  • 相关阅读:
    vue table 中 列 加上 下划线和click 方法
    vue 比较好的学习文章
    Hive 以及mysql 中如何做except 数据操作
    oracle 日期维表 原始版本 带注解
    RMI 实现的rpc 远程过程调用 Java
    剑指offer20:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
    剑指offer19:按照从外向里以顺时针的顺序依次打印出每一个数字,4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
    模拟通讯录
    剑指offer17:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
    剑指offer16:输入两个单调递增的链表,合成后的链表满足单调不减规则。
  • 原文地址:https://www.cnblogs.com/bzhong/p/5947175.html
Copyright © 2011-2022 走看看