1

我正在尝试存储本地保存的有关用户操作的分析数据,以便以后可以在用户有互联网连接时上传。我希望数据存储在本地,并且在正常情况下在应用程序的后续打开之间不会被删除。我不希望数据同步到 iCloud。理想情况下,我还希望在更新之间保留数据。如果数据在空间不足的情况下被删除,那很好。

我从不同的来源得到了关于数据存储位置的不同答案——无论是在 NSCachesDirectory 还是 NSLibraryDirectory 中。注意 NSCachesDirectory 是 NSLibraryDirectory 的子目录,例如。文件系统看起来像 Application_Home/Library/Caches/。

根据官方文档: http: //developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTuning/PerformanceTuning.html#//apple_ref/doc/uid/TP40007072-CH8-SW9暗示我应该使用 NSCachesDirectory 来存储数据,并且在大多数情况下不会被删除。这也意味着 NSLibraryDirectory 已同步到 iCloud。

根据这些答案:如何在 iPhone 上获得可写路径?, https://stackoverflow.com/a/5444762/340520/ , NSCachesDirectory 中的文件何时被删除?, NSCachesDirectory 不会在应用程序更新之间保留,并声称我必须不断地重新创建 NSCachesDirectory。第一个答案还暗示 NSLibraryDirectory 是存储数据的最佳位置。然而,这些答案是两年前的。

根据文档和这个答案:http: //developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTuning/PerformanceTuning.html#//apple_ref/doc/uid/TP40007072-CH8-SW10 , https://stackoverflow.com/a/8830746/340520 , NSCachesDirectory 在应用程序更新之间保留。

Localytics 的 iOS SDK 将他们的数据存储在 NSCachesDirectory:https ://github.com/twobitlabs/Localytics-iOS/blob/master/src/LocalyticsDatabase.m Mixpanel 的 iOS SDK 将他们的数据存储在 NSLibraryDirectory:https ://github.com/ mixpanel/mixpanel-iphone/blob/master/Mixpanel/Mixpanel.m

在所有这些来源中,我一直倾向于使用 NSCachesDirectory,但我不确定在某些情况下数据不会被定期删除。

4

3 回答 3

1

NSCachesDirectory 是存储您在应用程序启动甚至设备重新启动时需要的持久信息的错误位置。

为了证明我的观点,试试这个......

  1. 获取只有 8GB 磁盘空间的 iPhone 设备。
  2. 使用您的应用程序在 NSCachesDirectory 中写入文件。
  3. 开始下载随机应用程序以填满磁盘空间。很快您将看到操作系统显示的存储限制对话框。
  4. 现在只需重新启动手机,启动应用程序,看看是否可以找到您编写的文件。

如果您第一次找到该文件,请再试一次,您会发现您的文件丢失了。在设备启动期间,如果您看到设备日志,您会注意到日志表明正在清除目录以腾出空间等。

使用 NSCachesDirectory 存储您可以从您的服务器继续下载的信息。不是您需要上传到服务器的信息。

于 2016-01-25T19:07:14.777 回答
0

Caches 目录应该只用于您的应用程序可以轻松替换的文件(如果它们被删除)。Caches 目录可能会或可能不会在应用程序更新期间被清除,并且可能会在设备存储空间不足的情况下被清除。仅将其用于临时文件或您可以轻松替换的文件。

我的第一选择是Library/Application Support目录 ( NSApplicationSupportDirectory)。请注意,默认情况下不会创建此目录。您的应用必须在首次启动时创建它。此路径在应用程序更新期间保留(与大多数应用程序沙盒一样),并通过 iTunes(或 iCloud)设备备份进行备份。

于 2013-03-01T04:05:14.950 回答
0

我认为最好的地方是Library/Application Support (NSApplicationSupportDirectory)参考如何防止文件备份到 iCloud 和 iTunes?详情。

于 2013-05-24T08:12:13.653 回答