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保存的数据是直接显示出来的,不安全。通过归档方法保存的数据在文件中打开是编码,更安

 

iOS学习之应用数据存储1-属性列表、偏好设置、NSKeyedArchiver归档的更多相关文章

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

    iOS数据存储之属性列表理解 数据存储简介 数据存储,即数据持久化,是指以何种方式保存应用程序的数据. 我的理解是,开发了一款应用之后,应用在内存中运行时会产生很多数据,这些数据在程序运行时和程序一起 ...

  2. 数据存储之属性列表Plist

    常用的数据存储有属性列表.偏好设置.归档.sqlite.coreData.上一博客了解了沙盒,现在了解下属性列表Plist. 通常通过NSArray.NSDictionary集合类的WriteToFi ...

  3. 数据存储之plist、偏好设置

    // 偏好设置--------------------------------- // 存储基本类型数据 NSUserDefaults *defaults = [NSUserDefaults stan ...

  4. 1211笔记关于//modal//更改窗口的根控制器//数据存取//Plist属性列表//-“沙盒机制”//plis属性列表//偏好设置//归档普通对象//联系人数据存储//协议与回调函数

    一.利用Modal形式展示控制器 1.如何展示// vc就是要展示的新控制器[self presentViewController:vc animated:YES completion:^{    N ...

  5. iOS开发之数据存储之XML属性列表(plist)归档

    1.概述 “归档”意思是持久化存储数据.plist文件是一种XML格式的文件,拓展名为plist.如果对象是NSString.NSDictionary.NSArray.NSData.NSNumber等 ...

  6. iOS开发之CoreData数据存储

    iOS开发之CoreData数据存储 参考资料:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreD ...

  7. iphone开发中数据持久化之——属性列表序列化(一)

    数据持久化是应用程序开发过程中的一个基本问题,对应用程序中的数据进行持久化存储,有多重不同的形式.本系列文章将介绍在iphone开发过程中数据持久化的三种主要形式,分别是属性列表序列号.对象归档化以及 ...

  8. iOS数据持久化存储之属性列表

    属性列表(plist) iOS提供了一种plist格式的文件(属性列表)用于存储轻量级的数据,属性列表是一种XML格式的文件,拓展名为plist.如果对象是NSString.NSDictionary. ...

  9. Android 学习笔记之数据存储SharePreferenced+File

    学习内容: Android的数据存储.... 1.使用SharedPreferences来保存和读取数据... 2.使用File中的I/O来完成对数据的存储和读取...   一个应用程序,经常需要与用 ...

随机推荐

  1. WordPress实现登录或退出后直接跳转到首页的方法

    现在Wordpress是登录之后跳回到我们上次查看的页面,那么要如何修改它登录之后直接跳回到首页呢,这里就来给给大家详细介绍一下解决方法. 首先定位到登录链接所在位置,你会看到类似下面的代码: 复制代 ...

  2. 优秀Python学习资源收集汇总(强烈推荐)

    Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮进来定义语句块.与Scheme.Ruby.Perl ...

  3. js产生随机数并加入数组

    <!doctype html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  4. 第九天 内容提供者 ContentResolver

    重点:理解ContentProvider 的作用和创建流程 1. 内容提供者,提供 其他数据库的访问. 特点       - 描述 : 它是android 四大组件之一,需要androidManife ...

  5. GZAPI框架初识

    新建一个MVC项目(GZAPIFramework.Demo): mvc:用于API接口文档查看,Log日志查看 webapi:api调用 新建一个Biz类库并添加nuget引用: 搜索GZAPI.Co ...

  6. 关于行内元素的margin padding一些说明;background-color的范围

    ①当对行内元素使用padding时,只有左右方向(正常)有效:竖直方向上,内边距对于该行内元素有效果,但是对其他元素无任何影响. ②当对行内元素使用margin时,只有左右方向有效,竖直方向无任何效果 ...

  7. 解决一道leetcode算法题的曲折过程及引发的思考

    写在前面 本题实际解题过程是 从 40秒 --> 24秒 -->1.5秒 --> 715ms --> 320ms --> 48ms --> 36ms --> ...

  8. iscroll 使用及遇到的问题

    介绍: iscroll.js 是滑动事件.在手机上可以快速的滑动,用户体验很好.在线例子: 选择套餐 iScroll必须在调用之前实例化---用法 <script src="iscro ...

  9. AC自动机入门

    Aho-Corasick automaton,该算法在1975年产生于贝尔实验室,是著名的多模式匹配算法之一. KMP算法很好的解决了单模式匹配问题,如果有了字典树的基础,我们可以完美的结合二者解决多 ...

  10. Knockout 新版应用开发教程之创建view models与监控属性

    最近抽出点时间研究MVVM,包括司徒正美的avalon,google的angular,以及Knockout,博客园Tom的Knockout指南 时隔2年了,ko更新了不少,所以文档也相应的变化了,所以 ...