时间久了容易忘,针对沙盒的相关实用技巧做一个记录和整理。

一、iOS数据存储常用方式

1、XML属性列表(plist)

不是所有对象都可以写入;

2、Preference(偏好设置)

本质还是通过“plist”来存储数据,但是使用简单(无需关注文件、文件夹路径和名称);

3、NSKeyedArchiver归档(NSCoding)

把任何对象,直接保存为文件的方式;

4、SQLite3

当非常大量的数据存储时使用;

5、CoreData

就是对SQLite的封装。

本文只做前三种研究

二、沙盒概述

1、每个iOS应用都有自己的应用沙盒(应用沙盒就是应用的文件夹),与其他文件系统隔离。

2、应用必须呆在自己的沙盒里,其他应用不能访问该沙盒。

3、区别Bundle路径(app的安装目录),沙盒是app的存储路径。

4、应用沙盒的文件系统目录如下:

三、沙盒结构

1、Documents:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录。保存相对重要的数据。

2、tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录。保存不重要的并且大的数据。

3、Library/Caches:保存应用运行时生成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积大、不需要备份的非重要数据

4、Library/Preference:保存应用的所有偏好设置,iOS的Settings(设置)应用会在该目录中查找应用的设置信息。iTunes同步设备时会备份该目录。该目录由系统管理, 无需我们来管理。通常用来存储一些基本的软件配置信息, 比如记住密码、自动登录等。

四、沙盒路径的获取以及路径的拼接

1、沙盒根目录:NSHomeDirectory()

2、4个文件夹路径

(1)document:

[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]

(2)library:

[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];

(3)tmp:

NSTemporaryDirectory()

(4)caches:

[NSSearchPathForDirectoriesInDomains(NSCachesDirectory(), NSUserDomainMask, YES) lastObject];

3、关于路径的备注:

(1)参数: NSUserDomainMask 代表从用户文件夹下找; YES 代表展开路径中的波浪字符“~”。

(2)NSSearchPathForDirectoriesInDomains方法,返回的是数组,在iOS中,只有一个目录跟传入的参数匹配,所以这个集合里面只有一个元素。

4、路径的拼接

(1)strA stringByAppendingPathComponent:@“data.plist” :此方法不用考虑strA中的“/”符号。

五、iOS数据存储的三种方式

1、writeToFile ,直接写成plist文件,存储类型不是任意对象

例:[data writeToFile:path atomically:Yes] ; data为NSdata类型对象,path为存储路径,Yes为线程保护。

2、NSUserDefaults偏好设置存储,不需要路径,注意使用同步

(1)获取偏好设置对象

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

(2)存储数据

  [defaults setObject:@"小明" forKey:@"name"];

  [defaults setInteger: forKey:@"money"];

  [defaults setBool:NO forKey:@“isSame”];

(3)立即同步(防止数据丢失,强制同步更新,系统有时会延时处理)

  [defaults synchronize];

(4)读取数据

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

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

    BOOL isOrNot = [defaults boolForKey:@"isSame"];

(5)偏好设置存储新的数据,不会覆盖原有文件,会在原文件里面续写。

3、NSKeyedArchiver归档

(1)如果对象是NSString、NSDictionary、NSArray、NSData、NSNumber等类型,可以直接用NSKeyedArchiver进行归档和恢复,不是所有的对象都可以直接用这种方法进行归档,只有遵守了NSCoding协议的对象才可以。

(2)归档 ,例:[NSKeyedArchiver archiveRootObject:p toFile:path]; path为路径

(3)解档(反归档),例:Person *p =  [NSKeyedUnarchiver  unarchiveObjectWithFile:path];

(4)遵守 NSCoding 协议(2个方法),存储哪种类型的对象,就在其类实现中重写以下方法。

"归档"只是存储数据的过程,每次归档对象时,都会调用这个方法。这是告诉系统对象的哪些属性需要存储,该如何存储;若该属性没写则不会存储进去。

-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.name forKey:@"name"]; [aCoder encodeInt:self.girl forKey:@"girl"]; [aCoder encodeBool:self.sure forKey:@"sure"]; } 

"反归档"只是读取数据的过程,每次从文件中恢复(解码)对象时,都会调用这个方法。这是告诉系统取出的哪些数据赋值给对象的哪些属性,若该属性没写不会获取出来,注意super的调用。

- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
if(self = [super init]){ self.name = [aDecoder decodeObjectForKey:@"name"]; self.girl = [aDecoder decodeIntForKey:@"girl"]; self.sure = [aDecoder decodeBoolForKey:@"sure"];
}
return self;
}

iOS沙盒及数据存储的更多相关文章

  1. Swift之沙盒与数据存储

    应用沙盒结构分析 1.应用程序包:包含了所有的资源文件和可执行文件 2.Documents:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录 3.tmp:保存应用运行时所需要的 ...

  2. iOS - 沙盒与目录

    NSFileManager NSBundle Class Cluster 采用Tagged Pointer的字符串 NSPathStore iOS证书ipa包重签名探究 url 结构 1. iOS 沙 ...

  3. IOS沙盒Files目录说明和常用操作

    Ios沙盒目录清单 1 Documents 用于存储用户生成的文件.其他数据及其他程序不能重新创建的文件,默认文件通过iCloud自动备份.如果不需要iCloud备份,则设置标记 NSURLIsExc ...

  4. iOS 沙盒目录结构介绍

    iOS系统中,每个应用都有自己的沙盒,且应用只能访问其对应的沙盒目录下面的文件.当然,在用户授权的情况下,应用也可以访问其他目录下面的文件.比如,用户授权情况下,应用可以访问相册.通讯录.在开发中,经 ...

  5. QF——iOS沙盒机制

    iOS沙盒机制: 什么是沙盒机制?  点击进入  点击进入 沙盒机制(SandBox)是一种安全体系,它规定了APP的所有文件数据都必须存储在这片区域.所有非代码文件的数据都保存在这片区域. 沙盒里有 ...

  6. iOS学习7:iOS沙盒(sandBox)机制(一)之获取沙盒路径及目录说明(转)

    转:http://my.oschina.net/joanfen/blog/151145 一.iOS沙盒机制 iOS的应用只能访问为该应用创建的区域,不可访问其他区域,应用的其他非代码文件都存在此目录下 ...

  7. iOS沙盒(sandbox)

    iOS沙盒 每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,默认下iOS应用只能访问自己的沙盒 extenaion是iOS8新开放的一种对几个固定系统区域的扩展机制,它可以在一定程度上弥补 ...

  8. IOS 学习之 iOS沙盒(sandbox) 介绍 沙盒机制 文件操作(一)

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

  9. iOS 阶段学习第25天笔记(iOS沙盒机制介绍)

    iOS学习(OC语言)知识点整理 一.iOS沙盒机制介绍 1)概念: 每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒 ...

随机推荐

  1. Java多线程学习笔记(一)——多线程实现和安全问题

    1. 线程.进程.多线程: 进程是正在执行的程序,线程是进程中的代码执行,多线程就是在一个进程中有多个线程同时执行不同的任务,就像QQ,既可以开视频,又可以同时打字聊天. 2.线程的特点: 1.运行任 ...

  2. Java 之jdbc连接mysql数据库

    package jdbc; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; ...

  3. ubuntu 更改终端颜色

    1.$ sudo gedit .bashrc 2.PS1="\[\033[1;36;01m\]\u\[\033[00m\]\[\033[1;34;01m\]@\[\033[00m\]\[\0 ...

  4. 视频cover占满

    /* 关键属性 */ object-fit: fill; //被替换的内容的大小,以填补该元素的内容框:对象的具体对象的大小是元素的使用宽度和高度. object-fit: contain;被替换的内 ...

  5. python学习笔记--关于函数的那点事1

    函数参数 1.位置参数 类似于java函数的基本参数,按照顺序和结构定义参数 2.默认参数 def method(param,defaultParam=defaultValue) 调用时,可以调用me ...

  6. 基于Composer的Laravel扩展包开发工作流

    使用场景 在引用第三方包的时候,对第三方包有改动需求,需要将代码放在自己的仓库:并且自己的其他项目也有需求引用自定义的第三方包:甚至自己会发布修改后的第三方包: 读完本文你讲获得: Git Submo ...

  7. Vue源码学习(二)——生命周期

    官网对生命周期给出了一个比较完成的流程图,如下所示: 从图中我们可以看到我们的Vue创建的过程要经过以下的钩子函数: beforeCreate => created => beforeMo ...

  8. node.js 中的package.json文件怎么创建?

    最近在用webstorm和nodejs做一些东西,老是各种混乱,今天上午创建一个新的项目,结果发现,npm init之后,并没有出现package.json,并没有太明确他的功能的小姑娘表示十分的惊慌 ...

  9. 【codeforces 510C】Fox And Names

    [题目链接]:http://codeforces.com/contest/510/problem/C [题意] 给你n个字符串; 问你要怎么修改字典序; (即原本是a,b,c..z现在你可以修改每个字 ...

  10. fzu 2129

    第i个元素a未出现过:dp[i] = (2 * dp[i-1] + 1) % mod; visit[a]代表a最后出现的位置 第i个元素a出现过:dp[i] = (2 * dp[i-1] - dp[v ...