iOS设备上保存从网页下载的图像的最佳位置是哪里?

3
我的应用程序从网络下载图片,并且出于明显的性能原因,我需要将其缓存到我的设备上。那么我的问题是:哪里是存储这些图片的最佳位置?
我看到很多人使用NSDocumentDirectory,但是苹果公司说:
关键数据应存储在/Documents目录中。关键数据是指您的应用程序无法重新创建的任何数据,例如用户文档和其他用户生成的内容。
因此,我认为图像不属于这个类别。苹果还说:
支持文件包括应用程序下载或生成的文件以及应用程序可以根据需要重新创建的文件。存储应用程序的支持文件的位置取决于当前的iOS版本。
因此,也许NSApplicationSupportDirectory是存储它的最佳位置。
但是我还看到了NSDownloadsDirectoryNSPicturesDirectory。缓存目录对我来说不好,因为它在应用程序更新后会被删除。
所有这些都让我感到困惑。什么是正确的位置,为什么?

你成功创建了目录吗?我正在尝试创建一个NSDownloadsDirectory,但遇到了Cocoa错误513,这意味着我无法在该路径下创建文件。 :-/ - Neeku
实际上,我认为NSDownloadsDirectory目录已经存在,所以您不需要创建它。但是,如果您想在NSDownloadsDirectory内部创建一个目录,我认为您可以这样做,我实际上使用这个简单的代码将数据写入目录:'NSString *basePath = [self directoryUrlWithObjectId:objectId]; NSError *error; [photo writeToFile:basePath options:0 error:&error];' 在directoryUrlWithObjectId中,我只是获取目录的路径。 - Max_Power89
1个回答

4
好问题!既然你不想使用NSCachesDirectory,我认为NSApplicationSupportDirectory会是一个更好的选择。
根据苹果的文件系统编程指南您应该将应用程序的文件放在哪里 为了防止iOS设备上的同步和备份过程花费很长时间,请谨慎选择在应用程序主目录内放置文件的位置。存储大型文件的应用程序可能会减慢备份到iTunes或iCloud的过程。这些应用程序还可能消耗用户可用存储空间的大量空间,这可能会鼓励用户删除应用程序或禁用该应用程序的数据备份到iCloud。考虑到这一点,您应该根据以下指南存储应用程序数据:
  • 将用户数据放入<Application_Home>/Documents/。用户数据是任何无法由您的应用程序重新创建的数据,例如用户文档和其他用户生成的内容。

  • 处理支持文件 - 应用程序下载或生成并可以根据需要重新创建的文件 - 有两种方法:

    • 在iOS 5.0及更早版本中,将支持文件放在<Application_Home>/Library/Caches目录中,以防止它们被备份

    • 在iOS 5.0.1及更高版本中,将支持文件放在<Application_Home>/Library/Application Support目录中,并对它们应用com.apple.MobileBackup扩展属性。此属性可防止将文件备份到iTunes或iCloud。如果有大量支持文件,可以将它们存储在自定义子目录中,并仅对目录应用扩展属性。

  • 将数据缓存文件放入<Application_Home>/Library/Caches目录中。应将以下文件放入此目录:数据库缓存文件和可下载内容,例如杂志、报纸和地图应用程序使用的内容。您的应用程序应能够优雅地处理系统删除缓存数据以释放磁盘空间的情况。

  • 将临时数据放入<Application_Home>/tmp目录中。临时数据包括您不需要长时间保留的任何数据。记得在使用完后删除这些文件,以便它们不会继续占用用户设备上的空间。

NSApplicationSupportDirectory:应用程序支持文件的位置(Library/Application Support)。 NSDownloadsDirectory:用户下载目录的位置。

NSPicturesDirectory: 用户图片目录的位置 (~/Pictures)

我理解这个问题是用户不会处理你缓存的照片。因此,它们是支持你的应用程序的文件,而不是用户的照片或下载文件。当你有一个下载管理器应用程序,分类用户下载的文件为图片、音乐、视频等时,这些文件夹就很适合使用。


那是我读过的同一份文件,但为什么不使用 NSDownloadsDirectory 或 NSPicturesDirectory 呢? - Max_Power89

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接