我们应该如何决定使用documentDirectory还是applicationSupportDirectory?

时间:2019-08-02 17:37:09

标签: ios

我们计划存储以下用户文件

  • SQLite文件
  • 图像文件
  • 音频文件

我们还为用户提供了一个选项,可以将上述文件上传和下载到第三方云存储中。

我想知道我们应该使用

FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)

FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask)

出于上述文件存储目的?

2 个答案:

答案 0 :(得分:2)

您选择的差别不大。主要区别在于您是否要使用文件浏览器或“文件”应用;他们可以在您的文档目录中查找,但不能在您的应用程序支持目录中查找。

如果您选择一个并发布应用程序,然后又改变了主意,则很容易迁移和更改应用程序存储其信息的位置。

答案 1 :(得分:2)

从历史上看,我们使用“文档”文件夹,但是如今,“应用程序支持”目录是存放此类文件的最佳位置。

File System Programming Guide

  
      
  • 将用户数据放入Documents/中。用户数据通常包括您可能希望向用户公开的任何文件-您可能希望用户创建,导入,删除或编辑的所有文件。对于绘图应用程序,用户数据包括用户可能创建的任何图形文件。对于文本编辑器,它包括文本文件。视频和音频应用程序甚至可能包含用户下载以供以后观看或收听的文件。

  •   
  • 将应用程序创建的支持文件放入Library/Application support/目录中。通常,此目录包含应用程序用来运行但应向用户隐藏的文件。此目录还可以包含数据文件,配置文件,模板以及从应用程序捆绑包加载的资源的修改版本。

  •   
  • 请记住,默认情况下会备份Documents/Application Support/中的文件。您可以使用-[NSURL setResourceValue:forKey:error:]键调用NSURLIsExcludedFromBackupKey从备份中排除文件。必须将任何可以重新创建或下载的文件排除在备份之外。这对于大型媒体文件尤为重要。如果您的应用程序下载了视频或音频文件,请确保它们不包含在备份中。

  •   
  • 将临时数据放入tmp/目录中。临时数据包括不需要长时间保留的任何数据。完成操作后,请记住删除这些文件,以免它们继续占用用户设备上的空间。当您的应用未运行时,系统会定期清除这些文件;因此,您无法在应用终止后依赖这些文件的持久性。

  •   
  • 将数据缓存文件放入Library/Caches/目录中。高速缓存数据可用于需要持久保存的时间比临时数据更长的数据,但不能与支持文件一样长。一般来说,应用程序不需要缓存数据才能正常运行,但是可以使用缓存数据来提高性能。缓存数据的示例包括(但不限于)数据库缓存文件和瞬时的可下载内容。请注意,系统可能会删除Caches/目录以释放磁盘空间,因此您的应用必须能够根据需要重新创建或下载这些文件。

  •   

另请参见iOS Storage Best Practices视频。


如果使用.applicationSupportDirectory,建议您使用create设置为true的{​​{3}}:

let folderURL = try! FileManager.default
    .url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
相关问题