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