我正在尝试存储本地保存的有关用户操作的分析数据,以便以后在用户进行互联网连接时上传。我希望数据存储在本地,而不是在正常情况下在应用程序的后续打开之间删除。我不希望数据同步到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-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,但我不相信在某些情况下数据不会被定期删除。
答案 0 :(得分:1)
NSCachesDirectory是存储应用启动甚至设备重新启动时所需的持久性信息的错误位置。
要证明我的观点,试试这个......
如果您第一次找到该文件,请再次尝试该实验,您会发现文件丢失。在设备启动期间,如果您看到设备日志,您会注意到指示清除目录以创建空间等的日志。
使用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?了解详情。