我应该在iOS上存储分析数据的目录是什么?

时间:2013-03-01 03:47:27

标签: ios filesystems

我正在尝试存储本地保存的有关用户操作的分析数据,以便以后在用户进行互联网连接时上传。我希望数据存储在本地,而不是在正常情况下在应用程序的后续打开之间删除。我不希望数据同步到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同步。

根据这些答案:How can I get a writable path on the iPhone?https://stackoverflow.com/a/5444762/340520/When are files from NSCachesDirectory removed?,NSCachesDirectory不会在应用更新和声明之间保留,我必须不断重新创建NSCachesDirectory。第一个答案还暗示NSLibraryDirectory是存储数据的最佳位置。然而,这些答案已有两年了。

根据文档和答案:http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTuning/PerformanceTuning.html#//apple_ref/doc/uid/TP40007072-CH8-SW10https://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,但我不相信在某些情况下数据不会被定期删除。

3 个答案:

答案 0 :(得分:1)

NSCachesDirectory是存储应用启动甚至设备重新启动时所需的持久性信息的错误位置。

要证明我的观点,试试这个......

  1. 获取仅有8GB磁盘空间的iPhone设备。
  2. 使用您的应用在NSCachesDirectory中编写文件。
  3. 开始下载随机应用以填满磁盘空间。很快您将看到操作系统显示的存储限制对话框。
  4. 现在只需重新启动手机,启动应用程序,看看是否可以找到您撰写的文件。
  5. 如果您第一次找到该文件,请再次尝试该实验,您会发现文件丢失。在设备启动期间,如果您看到设备日志,您会注意到指示清除目录以创建空间等的日志。

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

答案 1 :(得分:0)

Caches目录应仅用于应用程序在删除时可轻松替换的文件。在应用程序更新期间可能会或可能不会清除Caches目录,并且可能是在设备用尽存储空间的情况下。仅用于临时文件或可轻松替换的文件。

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

答案 2 :(得分:0)

我认为最好的地方是Library/Application Support (NSApplicationSupportDirectory),请参阅How do I prevent files from being backed up to iCloud and iTunes?了解详情。