一、沙盒和应用程序包

•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. python开发学习-day06(模块拾忆、面向对象)

    s12-20160130-day06 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...

  2. spring_150901_hibernate_transaction_xml

    实体类: package com.spring.model; import javax.persistence.Entity; import javax.persistence.Id; import ...

  3. enumerate()和map()函数用法

    一.python enumerate用法 先出一个题目: 1.有一 list= [1, 2, 3, 4, 5, 6] 请打印输出: 0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 打印输出 ...

  4. 手机锁屏js倒计时停止问题解决办法探索

    如图,有这么个需求,测试人员在测试过程中提了一个bug,手机锁屏再唤醒倒计时时间没有更新,仍从锁屏的时间继续,于是开始寻找解决之法 经了解得知,锁屏时候,浏览器的一切活动会停止运行,那么js也无法幸免 ...

  5. shell 切分文件名提取文件扩展名或提取文件名

    有些脚本要根据文件名进行各种处理,有时候需要保留文件名抛弃文件后缀,也有时候需要文件后缀不要文件名,这类提取文件部分的操作使用shell的内建功能就能实现.需要用到的几个操作符有:%.%%.#.##. ...

  6. Hibernate 双向一对多的关联映射

    双向的一对多的关联关系是单项的一对多和单项的多对一的情况下产生的. 1.设计表结构 虽然关联关系变为双向的一对多,但是我们表结构不会发生改变,只是指向变了. 2.创建student对象 3.创建Gra ...

  7. logN判点是否在凸多边形内 HRBUSTOJ1429

    就是利用叉积的性质,如果向量A1到向量A2是顺时针则叉积为负反之为正. 然后我们可以二分的判断找到一个点恰被两条射线夹在一起. 然后我们再判断是否l,r这两个点所连直线与点的关系. 具体资料可以参照这 ...

  8. 20162304 实验一《Java开发环境的熟悉》实验报告

    Linux基础与Java开发环境 实验内容 1.熟悉Linux基础操作: 2.使用JDK编译.运行简单的Java程序: 实验要求 1.学习<Linux基础入门(新版)> 2.完成实验.撰写 ...

  9. zoj 3329 概率dp

    题意:有三个骰子,分别有k1,k2,k3个面.每个面值为1--kn每次掷骰子,如果三个面分别为a,b,c则分数置0,否则加上三个骰子的分数之和.当分数大于n时结束.求游戏的期望步数.初始分数为0 链接 ...

  10. [bzoj1021][SHOI2008]Debt 循环的债务 (动态规划)

    Description Alice. Bob和Cynthia总是为他们之间混乱的债务而烦恼,终于有一天,他们决定坐下来一起解决这个问题.不过,鉴别钞票的真伪是一件很麻烦的事情,于是他 们决定要在清还债 ...