在 iOS 设备中保存从 Web 下载的图像的最佳位置?

Posted

技术标签:

【中文标题】在 iOS 设备中保存从 Web 下载的图像的最佳位置?【英文标题】:Best place for save image downloaded from web in iOS devices? 【发布时间】:2013-11-30 10:42:24 【问题描述】:

我的应用程序从网络下载图像,显然出于性能原因,我需要将其缓存在我的设备上。所以我的问题是:存储照片的最佳地点在哪里? 我看到很多人使用NSDocumentDirectory 但苹果说:

关键数据应存储在 /Documents 目录。关键数据是您无法重新创建的任何数据 应用程序,例如用户文档和其他用户生成的内容。

所以我认为该图像不在此类别中。苹果也说:

支持文件包括您的应用程序下载或生成的文件,您的应用程序可以根据需要重新创建这些文件。存储应用程序支持文件的位置取决于当前的 ios 版本。

所以也许NSApplicationSupportDirectory 是存放它的最佳位置。

但我也看到了NSDownloadsDirectoryNSPicturesDirectory。缓存目录对我不利,因为它在应用更新后被删除。 所有这些东西让我很困惑。什么是正确的地方,为什么?

【问题讨论】:

您是否设法创建了目录?我正在尝试创建 NSDownloadsDirectory,但因 Cocoa 错误 513 而失败,这意味着我无法在该路径中创建文件。 :-/ 其实我认为 NSDownloadsDirectory 目录已经存在,所以你不需要创建它。但是如果你想在 NSDownloadsDirectory 中创建一个目录,我认为你可以这样做,我实际上使用这个简单的代码将数据写入目录:' NSString *basePath = [self directoryUrlWithObjectId:objectId]; NSError *错误; [照片 writeToFile:basePath 选项:0 错误:&error];'在 directoryUrlWithObjectId 中,我只需获取目录的路径 【参考方案1】:

好问题!既然你不想使用NSCachesDirectory,我认为NSApplicationSupportDirectory 会是一个更好的选择。

根据Apple's File System Programming Guide:

应将应用文件放在何处

为防止 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:应用程序支持文件的位置(库/应用程序支持)。

NSDownloadsDirectory:用户下载目录的位置。

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

我对这个问题的理解是用户不会处理您正在缓存的照片。因此,它们是支持您的应用程序的文件,而不是用户的照片或下载。假设您有一个下载管理器应用程序,您可以在其中将用户下载的文件分类为图片、音乐、视频等,这些文件夹将适合使用。

【讨论】:

那是我读过的同一个文件,但例如为什么不是 NSDownloadsDirectory 或 NSPicturesDirectory?

以上是关于在 iOS 设备中保存从 Web 下载的图像的最佳位置?的主要内容,如果未能解决你的问题,请参考以下文章

从 Xamarin ios 中的 url 下载图像的最佳方法是啥?

在 ios 7 和 ios 7+ 中处理设备特定图像的最佳方法

将图像保存在 iOS 相册(我的文件夹)中并存储图像 url

在设备上显示图像时出现问题

在android中从网络下载图像数据的最佳方法是啥

大型数据库 - 在设备上显示数据的最佳方式?