获取 Application Support 的完整目录
// 应用程序支持目录(Application Support)的完整路径
NSArray *supportPaths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
1. NSSearchPathForDirectoriesInDomains 函数
NSSearchPathForDirectoriesInDomains
是一个 Foundation 框架中的函数,用于查找指定目录的路径。- 该函数返回一个包含路径字符串的数组,表示指定的目录。
2. NSApplicationSupportDirectory
NSApplicationSupportDirectory
是一个枚举值,表示应用程序支持文件所在的目录。这个目录通常用于存放应用程序特定的数据文件,如设置文件、缓存文件等。
3. NSUserDomainMask
NSUserDomainMask
指定搜索的范围为用户的主目录。这意味着搜索结果将局限于当前用户的目录,而不会涉及系统或其他用户的目录。
4. YES
YES
参数表示函数应该返回完整的路径。如果将其设置为NO
,函数将返回相对路径。
5. *NSArray dirPaths
supportPaths
是一个指向 NSArray 对象的指针,这个数组包含了符合搜索条件的所有路径。对于大多数应用程序,数组中通常只有一个路径。
代码解释总结
这段代码调用 NSSearchPathForDirectoriesInDomains
函数以获取应用程序支持目录的路径,并将结果存储在 supportPaths
数组中。supportPaths
数组的第一个元素通常就是应用程序支持目录的路径。
你可以通过访问 supportPaths[0]
来获取具体的路径,例如:
NSString *appSupportPath = supportPaths[0];
这个路径可以用来存储和访问应用程序的支持文件。
appSupportPath实际的样子, 在 iOS 应用的沙盒中处在什么位置 ?
// 打印 supportPaths
<__NSSingleObjectArrayI 0x3023de0c0>(
/var/mobile/Containers/Data/Application/1AA3F724-0383-45E2-A3BE-E858FB681899/Library/Application Support
)
appSupportPath 这个目录的位置依赖于 iOS 沙盒系统,该系统为每个应用程序提供了一个独立的存储空间,以保护应用程序的数据和文件免受其他应用程序的影响。
1. 路径格式
appSupportPath
返回的路径通常如下所示:/var/mobile/Containers/Data/Application/<UUID>/Library/Application Support
- 其中
<UUID>
是由系统生成的一个唯一标识符,用于标识应用程序的沙盒目录。
2. 路径位置
- 在 iOS 应用的沙盒中,这个路径位于
Library/Application Support
目录下。 Library/Application Support
是一个专门为应用程序存储支持文件的目录,通常用于保存应用程序的设置、缓存数据或其他支持性文件。
3. 沙盒目录结构
-
iOS 应用的沙盒通常包含以下几个主要目录:
- Documents: 保存应用程序用户生成的文件,可以通过 iTunes 访问。
- Library: 存储应用程序的支持文件和配置数据,其中包括
Application Support
和Caches
子目录。 - tmp: 存储临时数据,应用程序不再使用时可以删除。
-
Application Support
目录位于Library
目录下,专门用于存储不需要暴露给用户的支持性文件。
4. 用途
- 开发者通常在这个目录中存储需要在应用程序之间共享的资源或需要持久化的数据,例如数据库文件、配置文件等。
- 由于这个目录不会被 iTunes 备份(除非特别设置),它通常用来存储大体积的数据或者可以重新生成的数据。
应用例子
- 如果你想在这个路径下创建一个文件路径,可以像这样做:
NSString *appSupportPath = supportPaths[0];
NSString *filePath = [appSupportPath stringByAppendingPathComponent:@"myfile.txt"];
这将创建一个文件路径,指向 Application Support
目录下的 myfile.txt
文件。
- 如果你想创建一个多级目录, 可以如下所示:
NSString *appSupportPath = supportPaths[0];
NSArray *components = @[appSupportPath, @"io", @"sqi", @"myDatabase.sqlite"];
NSString *dbPath = [NSString pathWithComponents:components];
总结来说,supportPaths[0]
返回的路径是应用程序支持文件存放的主要目录,在 iOS 沙盒系统中它处于应用程序的 Library/Application Support
目录下,用于保存重要的应用支持数据。
关于 的变化
在 iOS 应用的沙盒环境中,/var/mobile/Containers/Data/Application/<UUID>/
中的 <UUID>
是一个唯一标识符,用来标识应用程序的沙盒目录。这个 UUID 是在应用安装时由系统生成的,并且在以下情况下是稳定的:
1. 应用的生命周期
- UUID 在应用的整个生命周期内保持不变。这意味着只要应用没有被卸载,UUID 就不会改变。
2. 应用重新启动
- 每次应用启动时,这个 UUID 也是不变的。因此,在应用关闭后重新启动,或者在后台切换到前台,应用的沙盒路径中的 UUID 都是相同的。
3. 应用更新
- 即使应用更新,UUID 也不会改变,只要应用没有被卸载和重新安装。
4. 应用卸载
- 重要例外:如果应用被卸载并重新安装,系统会为它生成一个新的 UUID。这意味着卸载和重新安装后的应用将有一个不同的沙盒路径。
so, 小结如下
在应用的正常使用过程中(启动、关闭、后台切换等),UUID 是不会变化的。只有在应用被卸载并重新安装时,UUID 才会发生变化。这也意味着如果应用需要持久存储数据(例如通过文件系统),而用户卸载并重新安装了应用,那么之前存储的数据将无法通过新的沙盒路径访问。