一、沙盒和应用程序包

•iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被称为沙盒

•iOS常用目录:
–Bundle
–Documents
–Library/Caches
–Library/Preference
–tmp
显示mac隐藏文件:defaults write com.apple.finder AppleShowAllFiles -bool true
隐藏mac隐藏文件:defaults write com.apple.finder AppleShowAllFiles -bool false
 

应用程序包路径:资源库/Developer/CoreSimulator/Devices(设备plist文件)/data/Containers/Bundle/Application(应用程序包)

沙盒路径:资源库/Developer/CoreSimulator/Devices(设备plist文件)/data/Containers/Data/Application/(Document、Library、tmp)Library/(Caches缓存、Preferences用户偏好设置)
 
•应用程序包:(Bundle)包含了所有的资源文件和可执行文件
•Documents:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录
•Library/Caches:保存应用运行时生成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积较大、不需要备份的非重要数据
•Library/Preference:保存应用的所有偏好设置,iOS的设置应用会在该目录中查找应用的设置信息。iTunes同步设备时会备份该目录
•tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录
 
1、获取程序的Home目录

NSString *home = NSHomeDirectory();

沙盒目录常用获取方式:

2、获取Documents目录

NSUserDomainMask 代表从用户文件夹下找

YES 代表展开路径中的波浪字符“~”

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

只有一个匹配目录,所以这个集合里面只有一个元素

NSString *doc = documents[0];

使用字符串拼接的方式获取目录名

NSString *doc2 = [home stringByAppendingPathComponent:@"Documents”];

注意:

不建议采用字符串拼接的方式获取目录,因为新版本的操作系统可能会修改默认目录名称。

3、获取Cache目录

NSArray *caches = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);

NSString *cache = caches[0];

4、Preferences目录

通过NSUserDefaults类存取该目录下的设置信息

5、获取Tmp目录

NSString *tmpDir = NSTemporaryDirectory();

说明:获取路径只是一个必要的过程,目的是为了对路径下的文件进行操作。

二、偏好设置(不论在程序的那个地方,都可以设置数据保存到本地磁盘,作为全局数据来访问,例如界面跳转时可以用来传数据)
偏好设置的写入:
•很多iOS应用都支持偏好设置,比如保存用户名、密码、字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能
•每个应用都有个NSUserDefaults实例,通过它来存取偏好设置
•例如:保存用户名、字体大小、是否自动登录

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

[defaults setObject:@"itcast.cn" forKey:@"userName"];

[defaults setFloat:18.0f forKey:@"fontSize"];

[defaults setBool:YES forKey:@"autoLogin"];

偏好设置的读取:

// 读取系统偏好

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

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

float fontSize = [defaults floatForKey:@"fontSize"];

BOOL autoLogin = [defaults boolForKey:@"autoLogin"];

注意:UserDefaults设置数据时,不是立即写入,而是根据时间戳定时地把缓存中的数据写入本地磁盘。所以调用了set方法之后数据有可能还没有写入磁盘,应用程序就终止了。

出现以上问题,可以通过调用synchornize方法强制写入:

[defaults synchronize];

三、对象归档、解归档(也用来存储数据)
1、NSKeyedArchiver 归档、解归档(只适用于OC里面内置的对象)

+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path;//归档

+ (id)unarchiveObjectWithFile:(NSString *)path;//接归档

2、NSKeyedArchiver 归档、解归档(自定义的对象,必须要实现<NSCoding>协议)

- (void)encodeWithCoder:(NSCoder *)aCoder;//归档的协议方法

- (id)initWithCoder:(NSCoder *)aDecoder;//解归档的协议方法

+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path;//归档

+ (id)unarchiveObjectWithFile:(NSString *)path;//接归档

3、对多个对象进行归档、解归档

- (instancetype)initForWritingWithMutableData:(NSMutableData *)data;//用一个可变的data创建归档对象

- (void)encodeObject:(id)objv forKey:(NSString *)key;//将对象归档

- (void)finishDecoding//完成归档(必须执行)

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile//将数据写进归档文件中

- (instancetype)initForReadingWithData:(NSData *)data;//用一个data创建解归档对象,这个data由文件中获取而来

- (id)decodeObjectForKey:(NSString *)key;//解归档

iOS:沙盒、偏好设置、归档、解归档的更多相关文章

  1. iOS学习之应用数据存储1-属性列表、偏好设置、NSKeyedArchiver归档

    iOS应用数据存储的常用方式(持久化方式) 属性列表(plist)归档(XML文件) Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3 Core ...

  2. iOS 沙盒目录结构介绍

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

  3. iOS - 沙盒与目录

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

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

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

  5. iOS沙盒目录结构解析

    iOS沙盒目录结构解析 原文地址:http://blog.csdn.net/wzzvictory/article/details/18269713     出于安全考虑,iOS系统的沙盒机制规定每个应 ...

  6. iOS沙盒机制介绍,Block 的介绍

    一.iOS沙盒机制介绍 (转载) 1)概念:每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒,但在ios8中已经开放访 ...

  7. IOS沙盒机制

    一,ios应用程序只能在为该程序创建的文件系统中读取文件,不可以去其他地方访问,此区域被称为沙盒 1,每个应用程序都有自己的存储空间 2,应用程序不能翻过自己的围墙去访问别的存储空间的内容. 3,应用 ...

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

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

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

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

  10. iOS 沙盒(sandbox)机制和文件操作

    本文参看了 http://www.uml.org.cn/mobiledev/201209211.asp#1 这篇文章中的介绍,尊重原著. 1.IOS沙盒机制 IOS应用程序只能在本应用程序中创建的文件 ...

随机推荐

  1. Hadoop(三)HDFS读写原理与shell命令

    一 HDFS概述 1.1 HDFS产生背景 随着数据量越来越大,在一个操作系统管辖的范围内存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件 ...

  2. 9 行 javascript 代码获取 QQ 群成员

    昨天看到一条微博:「22 行 JavaScript 代码实现 QQ 群成员提取器」. 本着好奇心点击进去,发现没有达到效果,一是 QQ 版本升级了,二是博客里面的代码也有些繁琐. 于是自己试着写了一个 ...

  3. 2017-2018-1 20179202《Linux内核原理与分析》第二周作业

    本周着重学习了汇编指令,并通过反汇编C程序了解栈帧变化. 实践 看了孟老师的演示视频后,我重新写了C程序,如下: int main() { int a=1,b=2; return g(a,b); } ...

  4. 【交叉染色法判断二分图】Claw Decomposition UVA - 11396

    题目链接:https://cn.vjudge.net/contest/209473#problem/C 先谈一下二分图相关: 一个图是二分图的充分必要条件: 该图对应无向图的所有回路必定是偶环(构成该 ...

  5. linux常用解压命令总结

    .xz 解压: tar xvf FileName.tar.xz 打包: tar cvf FileName.tar DirName .tar 解包:tar xvf FileName.tar 打包:tar ...

  6. 使用webgl(three.js)创建3D机房,3D机房微模块详细介绍(升级版二)

    序: 上节课已经详细描述了普通机房的实现过程,文章地址(https://www.cnblogs.com/yeyunfei/p/10473021.html) 紧接着上节课的内容 我们这节可来详细讲解机房 ...

  7. Openstack关于Regions和Availability Zones

    在AWS中有Region和Availability Zones的概念,并且在openstack中也实现了两者,只是不太容易看出来. 此文主要介绍他们的概念和关系,以及在openstack中的实现. 如 ...

  8. Python实现简单的API接口

    get方法 代码实现   # coding:utf-8       import json   from urlparse import parse_qs   from wsgiref.simple_ ...

  9. 【BZOJ 4361】 4361: isn (DP+树状数组+容斥)

    4361: isn Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 218  Solved: 126 Description 给出一个长度为n的序列A( ...

  10. [HNOI2012]集合选数 --- 状压DP

    [HNOI2012]集合选数 题目描述 <集合论与图论>这门课程有一道作业题,要求同学们求出\({1,2,3,4,5}\)的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x ...