繁体   English   中英

我应该在iOS上的哪个目录中存储分析数据?

[英]What directory should I store analytics data in on iOS?

我正在尝试存储在本地保存的有关用户操作的分析数据,以便以后在用户具有Internet连接时可以上载。 我希望将数据存储在本地,并且在正常情况下在应用程序的后续打开之间不删除数据。 我不希望数据同步到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-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,但我不确定在某些情况下不会定期删除数据。

NSCachesDirectory是存储永久性信息的错误位置,您在整个应用程序启动甚至设备重新启动时都需要这些信息。

为了证明我的观点,尝试一下...

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

如果是第一次找到该文件,请重试该实验,您会发现文件丢失。 在设备启动期间,如果看到设备日志,则会注意到日志,指示清除目录以腾出空间等。

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

缓存目录仅应用于您的应用删除后即可轻松替换的文件。 在应用程序更新期间以及如果设备存储空间不足的情况下,可能会清除或可能不会清除Caches目录。 仅将其用于临时文件或可以轻松替换的文件。

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

我认为最好的地方是Library/Application Support (NSApplicationSupportDirectory)请参阅如何防止文件备份到iCloud和iTunes? 有关详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM