iOS数据持久化之---属性列表

属性列表(plist)

  iOS提供了一种plist格式的文件(属性列表)用于存储轻量级的数据,并且只能保存NSDictionary、NSArray、NSString、NSNumber、Boolean、NSData、NSDate 类型的数据。将这些类型的数据保存为plist格式文件,该格式保存的数据可以直接使用NSDictionary和NSArray读取 

(一)、使用NSUserDefault 实现持久化

     下面来看下 NSUserDefault 本地保存的位置,数据持久化之沙盒目录有提及。Library/Preferences 这个目录下的 plist 文件就是其保存的目录。
      NSUserDefault 的用法,主要是保存和读取

      初始化一个 NSUserDefault

    + (NSUserDefaults *)standardUserDefaults;

     设置数据的方法

    - (void)setObject:(nullable id)value forKey:(NSString *)defaultName;
    - (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;
    - (void)setFloat:(float)value forKey:(NSString *)defaultName;
    - (void)setDouble:(double)value forKey:(NSString *)defaultName;
    - (void)setBool:(BOOL)value forKey:(NSString *)defaultName;
    - (void)setURL:(nullable NSURL *)url forKey:(NSString *)defaultName NS_AVAILABLE(10_6, 4_0);

     读取数据的方法:

   - (nullable id)objectForKey:(NSString *)defaultName;
   - (nullable NSString *)stringForKey:(NSString *)defaultName;
   - (nullable NSArray *)arrayForKey:(NSString *)defaultName;
   - (nullable NSDictionary<NSString *, id> *)dictionaryForKey:(NSString *)defaultName;
   - (nullable NSData *)dataForKey:(NSString *)defaultName;
   - (nullable NSArray<NSString *> *)stringArrayForKey:(NSString *)defaultName;
   - (NSInteger)integerForKey:(NSString *)defaultName;
   - (float)floatForKey:(NSString *)defaultName;
   - (double)doubleForKey:(NSString *)defaultName;
   - (BOOL)boolForKey:(NSString *)defaultName;
   - (nullable NSURL *)URLForKey:(NSString *)defaultName NS_AVAILABLE(10_6, 4_0);

      删除数据的方法:

    - (void)removeObjectForKey:(NSString *)defaultName;

      保存数据:

     // 如果不手动调用,系统会自动保存,但时间不定

    - (BOOL)synchronize; 

   // 存储id类型数据

   + (void)setValue:(id)value andKey:(NSString *)key

    {

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

     [userDefaults setObject:value forKey:key];

     [userDefaults synchronize];

    }

    // 获取数据

    + (NSString *)getValueByKey:(NSString *)key

    {

    NSUserDefaults * settings = [NSUserDefaults standardUserDefaults];

    NSString *value = [settings objectForKey:key];

    return value;

     }

 

(二)、手动添加plist文件

      新建文件-->Resource-->Property List

       

    plist文件的根类型只能是NSArray或NSDictionary

     

    

      将plist文件中的数据读入对应的根类型

    // 1、获取文件所在的路径,Resource:文件名称、Type:文件格式

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"userInfos" ofType:@"plist"];

    // 2、从路径中获取对应格式的数据

    // 如果Root为NSArray,则使用数组保存

    NSArray *infos = [NSArray arrayWithContentsOfFile:filePath];

    NSLog(@"%@",infos);

    // 如果Root为NSDictionary,则使用字典保存

    NSDictionary *infoDic = [NSDictionary dictionaryWithContentsOfFile:filePath];

    NSLog(@"%@",infoDic);

(三)、直接讲数据写入plist文件

      由于 NSUserDefault 本质上就是通过 plist 文件来实现属性的持久化。所以,我们可以通过自己创建一个 plist 文件来实现属性的持久化。

        NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

        NSString *docPath = [path objectAtIndex:0];

        NSString *myFile = [docPath stringByAppendingPathComponent:@"test.plist"];

        NSMutableDictionary *contentDic;

        // 判断本地是否存在 plist 文件
        if ([[NSFileManager defaultManager] fileExistsAtPath:myFile] == NO) {
            NSFileManager* fm = [NSFileManager defaultManager];
            // 创建一个文件
            [fm createFileAtPath:myFile contents:nil attributes:nil];
            contentDic = [[NSMutableDictionary alloc] init];
        } else {
            contentDic = [[NSMutableDictionary alloc] initWithContentsOfFile:myFile];
        }
        // 数据的读写操作
        [contentDic setObject:@"1234" forKey:@"passWord"];
        // 将修改都的数据保存到 plist 文件中
        [contentDic writeToFile:myFile atomically:YES];

(四)、总结
    plist文件的读写效率比较高,由于他的读写需要将所有的数据取出再全部保存,所以只适合小数据。

时间: 2024-08-03 16:59:27

iOS数据持久化之---属性列表的相关文章

iOS数据存储之属性列表理解

iOS数据存储之属性列表理解 数据存储简介 数据存储,即数据持久化,是指以何种方式保存应用程序的数据. 我的理解是,开发了一款应用之后,应用在内存中运行时会产生很多数据,这些数据在程序运行时和程序一起驻留在内存中,一旦程序运行结束从内存中退出后,这些数据也就相应消失了.等到再次运行程序的时候,之前的那些数据又要重新计算.但是对于一些应用,我们需要将程序产生的数据持久的保存起来,使得应用重启之后这些数据不会丢失,这时候就需要用到数据的持久化技术. 在iOS设备上实现数据持久化存储的方式有很多中机制

iOS 开发指南 第11章 数据持久化之属性列表 学习

1 概述 沙箱目录:一种安全策略,原理是只能允许自己的应用访问目录,而不许其他应用访问. 子目录:Documents 用于储存非常大的文件或需要非常频繁更新的数据 NSArray *documentDirectory=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES): documentDirectory是只有一个元素的数组,还需要取出路径 NSString *myDocPath=[docum

IOS数据持久化之归档NSKeyedArchiver

IOS数据持久化的方式分为三种: 属性列表 (自定义的Property List .NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data.第三方类库等) 下面主要来介绍一个归档NSKeyedArchiver. 归档(又名序列化),把对象转为字节码,以文件的形式存储到磁盘上:程序运行过程中或者当再次重写打开程序的时候,可以通过解归档(反序列化)还原这些对象. 归档方式: 对Foundation框架中对象进行归档 对自定义的内容进行归档

iOS开发笔记-swift实现iOS数据持久化之归档NSKeyedArchiver

IOS数据持久化的方式分为三种: 属性列表 (plist.NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data.第三方类库等 归档(又名序列化),把对象转为字节码,以文件的形式存储到磁盘上:程序运行过程中或者当再次重写打开程序的时候,可以通过解归档(反序列化)还原这些对象.本文主要介绍swift实现iOS数据归档. 归档Foundation框架对象 func archiveData(){ var path: AnyObject=NS

iOS -数据持久化方式-以真实项目讲解

前面已经讲解了SQLite,FMDB以及CoreData的基本操作和代码讲解(CoreData也在不断学习中,上篇博客也会不断更新中).本篇我们将讲述在实际开发中,所使用的iOS数据持久化的方式以及怎么会使用到这些方式,都会以本人实际开发的场景为例,大约需要花10-15分钟,欢迎大家指正. 一.前言 和大家说一个真实故事,前年我去美图面试(当时的技术仅仅是UI和接口的实现,并不注重很多底层实现和很多概念的原理,换句话说,就是真正的码农),过了技术第一轮和第二轮(前两年的也就是问问技术点的实现),

iOS数据持久化方式分析

iOS数据持久化的方式一般为:plist文件写入.对象归档.SQLite数据库.CoreData. plist文件写入.对象归档一般用于小的数据量. SQLite数据库.CoreData则用于大的数据量. SQLite是一款轻型的数据库,是一种关系型数据库管理系统,他的设计目的是嵌入式设备中使用. SQLite占用资源非常低,非常适合移动设备中使用,而且是开源免费的 SQLite的数据库操作其实和常规的数据库操作流程是一样的: 1.打开数据库 sqlite3_open() 2.准备SQL语句,采

iOS数据持久化之二——归档与设计可存储化的数据模型基类

iOS数据持久化之二--归档与设计可存储化的数据模型基类 一.引言 在上一篇博客中,我们介绍了用plist文件进行数据持久化的方法.虽然简单易用,但随着开发的深入,你会发现,这种方式还是有很大的局限性.试想,如果我们可以将用户的登录返回信息模型,游戏中角色的属性信息模型进行直接的持久化存取,那是不是非常爽的事,幸运的是,我们可以通过归档,来设计一个这样的数据模型. 二.先来精通归档吧 归档也是iOS提供给开发者的一种数据存储的方式,事实上,几乎所有的数据类型都可以通过归档来进行存取.其存储与读取

数据存储之属性列表

NSUserDefaults的使用 一.NSUserDefaults的简单介绍 用户轻量级的数据持久化,主要用于保存用户程序的配置等信息,以便下次启动程序后能恢复上次的设置.该数据实际上是以"键值对"形式保存的(类似于NSDictionary-),因此我们需要通过key来读取或者保存数据. 二.NSUserDefaults的使用 1.获取一个NSUserDefaults引用 NSUserDefaults *userDefaults = [NSUserDefaults standardU

iOS数据持久化存储

本文中的代码托管在github上:https://github.com/WindyShade/DataSaveMethods 相对复杂的App仅靠内存的数据肯定无法满足,数据写磁盘作持久化存储是几乎每个客户端软件都需要做的.简单如"是否第一次打开"的BOOL值,大到游戏的进度和状态等数据,都需要进行本地持久化存储.这些数据的存储本质上就是写磁盘存文件,原始一点可以用iOS本身支持有NSFileManager这样的API,或者干脆C语言fwrite/fread,Cocoa Touch本身