数据持久化

什么是数据持久化?

数据的永久存储

为什么要做数据持久化:;存储在内存中的数据,程序关闭,内存释放,数据丢失,这种数据是临时的

数据持久化的本质:数据保存成文件,存储到程序的沙盒中

一、沙盒机制

每个应用程序位于文件系统的严格限制部分

每个应用程序只能在为该程序创建的文件系统中读取文件

每个应用程序在iOS系统内都放在了统一的文件夹目录下

沙盒的本质就是一个文件夹,名字是随机分配的,按照UUID标示符标记分配的

沙盒路径的位置

1、通过Finder查找程序沙盒相对路径

~/Library/Application Support/iPhone Simulator

常见问题

模拟器路径内有可能包含多个系统版本的路径

iPhone5及以前版本 32

iPhone5s 64

沙盒构成

Document   存储用户数据,需要备份的信息

Library/Caches  存储缓存文件,程序专用的支持文件

Library/Preferences 存储应用程序的偏好设置文件

.app     程序包(iOS时, app不存储在沙河中,有单独的文件夹存储所有程序的app包)

tmp      存储临时文件。比如:下载的zip包,解压后的再删除

通过代码查找程序沙盒相对路径

获取沙盒目录路径的方法

NSHomeDirectory              沙盒主路径

NSDocumentDirectory        Documents文件夹

NSLibraryDirectory             Library 文件夹

NSCachesDiectory              Caches 文件夹

NSTemporaryDirectory        temp文件夹

每个应用程序文件夹内的app文件路径的获取

路径打印结果如下:

二、简单对象写入文件

文件存储的相对目录

字符串对象写入文件

1、字符串对象写入文件

2、数组对象写入文件

3、字典对象写入文件

4、二进制对象写入文件

根据构造出的路径我们通过查找就可以在文件内看到生成的相应文件,如下:

数组和字典中的对象类型必须是上述四种

三、使用NSFileManager来管理文件

NSFileManager,文件管理,使用detaultManager,创建单例对象

可以创建文件夹

可以创建、移动、复制、删除文件

可以判断文件是否存在

具体步骤如下:

四、复杂对象写入文件

  

什么是复杂对象

1、在Foundation框架内不存在的数据类

2、无法在程序内通过writeToFile类型的方法写入到文件内

3、复杂对象至少包含一个实例对象

复杂对象怎么进行数据持久化,这就涉及到归档和反归档

复杂对象无法通过writeToFile:方法进行数据持久化,只能通过将复杂对象转换为NSData,通过writeToFile:进行数据持久化

通过归档,将复杂对象转换为NSData;通过反归档,将NSData转换为复杂对象

复杂对象写入文件时要遵守NSCoding 协议

例如我们建立一个Person类,使其接受NSCoding协议,同时创建一些Person属性

在对复杂对象进行归档时,执行下面方法

在对复杂对象反归档时,执行下面的方法

复杂对象写入文件(归档和反归档)

iOS 初级数据持久化的更多相关文章

  1. iOS初级数据持久化 沙盒机制 归档与反归档

    数据持久化就是数据保存成文件,存储到程序中的沙盒中. 沙盒构成 Document 存储用户数据,需要备份的信息 Caches 缓存文件, 程序专用的支持文件 Temp 临时文件 通过代码查找程序沙盒的 ...

  2. iOS 数据持久化(扩展知识:模糊背景效果和密码保护功能)

    本篇随笔除了介绍 iOS 数据持久化知识之外,还贯穿了以下内容: (1)自定义 TableView,结合 block 从 ViewController 中分离出 View,轻 ViewControll ...

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

    IOS数据持久化的方式分为三种: 属性列表 (plist.NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data.第三方类库等 归档(又名 ...

  4. IOS数据持久化之归档NSKeyedArchiver

    IOS数据持久化的方式分为三种: 属性列表 (自定义的Property List .NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data ...

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

    前面已经讲解了SQLite,FMDB以及CoreData的基本操作和代码讲解(CoreData也在不断学习中,上篇博客也会不断更新中).本篇我们将讲述在实际开发中,所使用的iOS数据持久化的方式以及怎 ...

  6. iOS数据持久化方式及class_copyIvarList与class_copyPropertyList的区别

    iOS数据持久化方式:plist文件(属性列表)preference(偏好设置)NSKeyedArchiver(归档)SQLite3CoreData沙盒:iOS程序默认情况下只能访问自己的程序目录,这 ...

  7. iOS数据持久化-OC

    沙盒详解 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文 ...

  8. iOS数据持久化

    在iOS中,实现数据持久化一般分为4大种: 1.属性列表 2.对象归档 3.SQLite 4.Core Data 一.属性列表 NSUserDefaults类的使用和NSKeyedArchiver有很 ...

  9. iOS数据持久化存储:归档

    在平时的iOS开发中,我们经常用到的数据持久化存储方式大概主要有:NSUserDefaults(plist),文件,数据库,归档..前三种比较经常用到,第四种归档我个人感觉用的还是比较少的,恰恰因为用 ...

随机推荐

  1. mysql 二进制安装文件 下载

    在linuex环境下安装mysql,二进制安装包是最合适的方式,下载下来不用编译就可用了. 官方说明文档:http://dev.mysql.com/doc/refman/5.1/en/binary-i ...

  2. 洛谷P1211 [USACO1.3]牛式 Prime Cryptarithm

    P1211 [USACO1.3]牛式 Prime Cryptarithm 187通过 234提交 题目提供者该用户不存在 标签USACO 难度普及- 提交  讨论  题解 最新讨论 题面错误 题目描述 ...

  3. Duilib学习笔记《03》— 控件使用

    在前面已经对duilib有个一个基本的了解,并且创建了简单的空白窗体.这仅仅只是一个开始,如何去创建一个绚丽多彩的界面呢?这就需要一些控件元素(按钮.文本框.列表框等等)来完善. 一. Duilib控 ...

  4. html5 搖一搖

    <script> // 首先在页面上要监听运动传感事件 function init(){ if (window.DeviceMotionEvent) { // 移动浏览器支持运动传感事件 ...

  5. Java 对字符反转操作。

    //把一段字符串反转后大小写互换位置 public class test_demo { public static void main(String[] args)throws Exception { ...

  6. nodejs安装及环境配置

    简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Node.js是一个事件驱动I/O服务端Ja ...

  7. jQuery打造用户注册时获取焦点文本框出现提示jquery表单特效

    jQuery打造用户注册时获取焦点文本框出现提示效果的jquery表单特效 当获取焦点时,会分别的弹出相应的信息提示框,失去焦点就会隐藏提示信息. 效果兼容性很高,适用浏览器:IE6.IE7.IE8. ...

  8. Ubuntu 14.04 安装flash插件

    分别tar.gz和apt-get方法 第一种: adboe官网下载tar.gz,进入terminal 1.解压缩包,输入命令“tar -zxvf 软件包名字” 2.拷贝插件到mozilla目录,输入命 ...

  9. 旋转转盘选择Menu--第三方开源--CircleMenu

    CircleMenu在github上的项目主页是:https://github.com/zhangphil/Android-CircleMenu CircleMenu用法简单,JAVA代码: pack ...

  10. PHP中英文字符串截取函数无乱码(mb_substr)和获取中英文字符串字数函数(mb_strlen)

    mb_substr( $str, $start, $length, $encoding ) $str,需要截断的字符串 $start,截断开始处,起始处为0 $length,要截取的字数 $encod ...