文件系统与沙盒
问题
iOS 的沙盒结构是什么?各目录的用途?
答案
沙盒目录结构
App Sandbox/
├── Documents/ ← 用户数据,iCloud 备份
├── Library/
│ ├── Caches/ ← 缓存文件,系统可能清理
│ ├── Preferences/ ← UserDefaults plist
│ └── Application Support/ ← App 支持文件,iCloud 备份
├── tmp/ ← 临时文件,系统随时清理
└── SystemData/
获取路径
// Documents
let docs = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
// Caches
let caches = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first!
// tmp
let tmp = FileManager.default.temporaryDirectory
文件操作
let fm = FileManager.default
let filePath = docs.appendingPathComponent("data.json")
// 写入
let data = try JSONEncoder().encode(user)
try data.write(to: filePath)
// 读取
let readData = try Data(contentsOf: filePath)
let user = try JSONDecoder().decode(User.self, from: readData)
// 是否存在
fm.fileExists(atPath: filePath.path)
// 删除
try fm.removeItem(at: filePath)
常见面试问题
Q1: Documents 和 Caches 的区别?
答案:
Documents:用户生成的数据,iCloud 自动备份,系统不会清理Caches:可重新生成的缓存数据,不备份,磁盘空间不足时系统可能清理
Q2: 大文件应该存在哪里?
答案:下载的视频、图片缓存等放 Caches(可再次下载,不占备份空间)。用户创建的文档放 Documents。临时处理中间产物放 tmp。