从 SearchPath 说起

获取 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 SupportCaches 子目录。
    • tmp: 存储临时数据,应用程序不再使用时可以删除。
  • Application Support 目录位于 Library 目录下,专门用于存储不需要暴露给用户的支持性文件。

4. 用途

  • 开发者通常在这个目录中存储需要在应用程序之间共享的资源或需要持久化的数据,例如数据库文件、配置文件等。
  • 由于这个目录不会被 iTunes 备份(除非特别设置),它通常用来存储大体积的数据或者可以重新生成的数据。

应用例子

  1. 如果你想在这个路径下创建一个文件路径,可以像这样做:
NSString *appSupportPath = supportPaths[0];
NSString *filePath = [appSupportPath stringByAppendingPathComponent:@"myfile.txt"];

这将创建一个文件路径,指向 Application Support 目录下的 myfile.txt 文件。

  1. 如果你想创建一个多级目录, 可以如下所示:
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 才会发生变化。这也意味着如果应用需要持久存储数据(例如通过文件系统),而用户卸载并重新安装了应用,那么之前存储的数据将无法通过新的沙盒路径访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

依旧风轻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值