IOS沙盒存储 - niancan/doc GitHub Wiki
介绍
iOS中的沙盒机制是一种安全体系。为了保证系统安全,iOS每个应用程序在安装时,会创建属于自己的沙盒文件(存储空间)。应用程序只能访问自身的沙盒文件,不能访问其他应用程序的沙盒文件,当应用程序需要向外部请求或接收数据时,都需要经过权限认证,否则,无法获取到数据。所有的非代码文件都要保存在此,例如属性文件plist、文本文件、图像、图标、媒体资源等,其原理是通过重定向技术,把程序生成和修改的文件定向到自身文件夹中。
沙盒的目录结构
每个APP的沙盒下面都有相似目录结构,如下图:
- 项目.plist
- Documents
- Library
- SystemData
- tmp
沙盒API
- 沙盒根路径
let home=NSHomeDirectory()
- document文档目录
let home=NSHomeDirectory()//获取沙盒根路径
//document文档目录--方法一
let documentPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory,
FileManager.SearchPathDomainMask.userDomainMask,true).last
//获取文档目录路径--方法二,沙盒根路径字符串拼接路径
let docPath = home+"/Documents/"
// 第三种获取路径方式
let fileManager = FileManager.default
let urls = fileManager.urls(for: FileManager.SearchPathDirectory.documentDirectory,
in: FileManager.SearchPathDomainMask.userDomainMask) as [NSURL]
if urls.count > 0{
print("--------\(urls[0])")
print("--------\(urls)")
}
// 第四种获取路径方式
do{
let url = try fileManager.url(for: FileManager.SearchPathDirectory.documentDirectory,
in: FileManager.SearchPathDomainMask.userDomainMask, appropriateFor: nil,
create: false)
print("--------\(url)")
}catch{
}
- 缓存目录路径cache
let cachePath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.cachesDirectory,
FileManager.SearchPathDomainMask.userDomainMask, true).last! as String
- library目录路径:包含cache和Preference
let libtraryPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.libraryDirectory,
FileManager.SearchPathDomainMask.userDomainMask, true)[0] as String
- 临时目录路径temp
let tempPath = NSTemporaryDirectory() as String
数据存储到偏好设置 Library/Preferencd
//偏好设置存储
let def=UserDefaults.standard
def.set("aa", forKey: "a")
def.synchronize()
//获取值
let str = def.string(forKey: "a")
沙盒
.plist文件中
把数组存入到// 1、获得沙盒的根路径
let home=NSHomeDirectory()//获取沙盒根路径
//获取文档目录路径--方法二,沙盒根路径字符串拼接路径
let docPath = home+"/Documents/"
// 3、获取文本文件路径
let filePath = docPath + "data.plist"
let ar=["aa","ba","ca"] as NSArray//必须要转换成NSArray,否则不成功报错
// 4、将数据写入文件中
ar.write(toFile: filePath,atomically : true)
沙盒
中读取某个.plist文件
从// 1、获得沙盒的根路径
let home=NSHomeDirectory()//获取沙盒根路径
//获取文档目录路径--方法二,沙盒根路径字符串拼接路径
let docPath = home+"/Documents/"
// 3、获取文本文件路径
let filePath = docPath + "data.plist"
let ar=NSArray.init(contentsOfFile: filePath)
print(ar)