一、沙盒和应用程序包

•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. PyCharm中 ImportError: No module named tensorflow

    安装完 tensorflow 后在 PyCharm 中导入时显示找不到,可设置如下: PyCharm 中依次打开 File -> Settings -> Project:PycharmPr ...

  2. electron写俄罗斯方块游戏(Tetris)

    背景 在折腾ES6,突然想起大学时用c语言写过俄罗斯方块,本项目中主要是利用ES6的Class特性进行面向对象编程.项目采用node.js v6.2.0 + electron v1.1.0 进行桌面开 ...

  3. docker部署Asp.net core应用

    1 容器概念 使用Docker前我们首先要简单了解一下容器的概念.MSDN上有一张虚拟机和容器的对比图,很好的展示了虚拟机和容器的区别,如下所示,虚拟机包括应用程序.必需的库或二进制文件以及完整的来宾 ...

  4. 《java虚拟机》----java内存区域与内存溢出异常

    No1: java虚拟机所管理的内存将会包括以下几个运行时数据区域 1.方法区 2.虚拟机栈 3.本地方法栈 4.堆 5.程序计数器 No2: 程序计数器: 程序计数器(Program Counter ...

  5. HTTP缓存了解(一)

    引言 HTTP/1.1 200 OK X-Powered-By: Express Content-Type: text/html; charset=utf-8 Content-Length: 3 ET ...

  6. Python数据类型-列表(list)增删改查

    1.添加元素 添加单个元素:使用append(object)函数可以为列表添加单个元素,参数object为对象:也就是说所有Python的对象都可以添加到列表中. 添加多个元素(合并列表):使用ext ...

  7. XV6操作系统代码阅读心得(二):进程

    1. 进程的基本概念 从抽象的意义来说,进程是指一个正在运行的程序的实例,而线程是一个CPU指令执行流的最小单位.进程是操作系统资源分配的最小单位,线程是操作系统中调度的最小单位.从实现的角度上讲,X ...

  8. Java switch case和数组

    Java switch case 语句 switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支. 语法 switch case 语句格式: switch(express ...

  9. Arduino可穿戴教程之第一个程序——选择端口(三)

    Arduino可穿戴教程之第一个程序——选择端口(三) 2.4.4  选择端口 在选择了板子之后,我们就需要选择板子连接到电脑的端口了.它也在“工具”菜单中设置,如图2.42所示. 注意:COM1端口 ...

  10. [BZOJ4196][NOI2015]软件包管理器(树链剖分)

    4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2166  Solved: 1253[Submit][Sta ...