ios框架iOS TipsIOS

iOS 沙盒目录

2016-03-11  本文已影响975人  hi_xgb

iOS 应用程序只能在为该程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒。苹果官方文档中有如下一张图介绍沙盒目录:

官方文档对于沙盒中常用的目录做了说明,有如下几个常用目录:

  1. AppName.app:该目录包含了应用程序本身的数据,包括资源文件和可执行文件等。整个目录是只读的,并且不会被 iTunes 同步。可通过NSString *bundlePath = [[NSBundle mainBundle] bundlePath];获取到路径地址。

  2. Documents/:我们可以将应用程序的数据文件保存在该目录下。不过这些数据类型仅限于不可再生的数据,可再生的数据文件应该存放在Library/Cache目录下。该目录会被iTunes同步,可通过NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;获取到路径地址。

    • Documents/Inbox:外部应用程序需要访问的文件保存在该目录下,例如系统的邮件 App 要使用到当前应用程序的附件资源就存放在这个目录。沙盒机制是不允许外部程序访问沙盒中的文件,因此苹果的解决方案是将文件拷贝一份到应用的 Documents/Inbox 目录下。该目录只读,不可修改,会被 iTunes 同步。
  3. Library/:存放默认设置或其它状态信息。除了 Caches 子目录外其他目录都会被 iTunes 同步。

    • Library/Preferences:NSUserDefaults 写的设置数据都会保存到该目录下的一个 plist 文件中,会被 iTunes 同步。
    • Library/Caches: iTunes 不会同步此文件夹,并且当系统空间不足的时候会被清理,适合存储体积大,不需要备份的非重要数据。可通过NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;获取到路径地址。
  4. tmp/:各种临时文件,保存应用再次启动时不需要的文件。而且,当应用不再需要这些文件时应该主动将其删除,因为该目录下的东西随时有可能被系统清理掉,目前已知的一种可能清理的原因是系统磁盘存储空间不足的时候。可通过NSString *tmpPath = NSTemporaryDirectory();获取到路径地址。

写了一个小工具类用来获取这些路径地址:
https://github.com/hiXgb/BBDocumentPathUtil.git

参考文档:
https://developer.apple.com/library/mac/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html

如果您觉得本文对您有所帮助,请点击「喜欢」来支持我。

转载请注明出处,有任何疑问都可联系我,欢迎探讨。

上一篇下一篇

猜你喜欢

热点阅读