我用来NSUserDefaults
通过编码存储图像数据。我知道它可以保存在 Documents 目录中,但是如果内容太大,这将导致 App Store 拒绝,因为 iCloud 同步问题。它也可以保存在缓存目录中,但我保存的图像非常重要,我不想在缓存清除时丢失它们。
我担心我的应用程序会因为大量使用NSUserDefaults
数据存储而被拒绝——在离线环境中是否有其他方法来处理这个问题?
我用来NSUserDefaults
通过编码存储图像数据。我知道它可以保存在 Documents 目录中,但是如果内容太大,这将导致 App Store 拒绝,因为 iCloud 同步问题。它也可以保存在缓存目录中,但我保存的图像非常重要,我不想在缓存清除时丢失它们。
我担心我的应用程序会因为大量使用NSUserDefaults
数据存储而被拒绝——在离线环境中是否有其他方法来处理这个问题?
NSUserDefaults
不适合存储图像。您应该将这些存储在~/Library/Application Support
. 既然您说您不希望它们被备份,您应该按照iOS App Programming Guide中的说明进行操作:
在 iOS 5.1 及更高版本中,将支持文件存储在 /Library/Application Support 目录中,并使用 setResourceValue:forKey:error: 方法将 NSURLIsExcludedFromBackupKey 属性添加到相应的 NSURL 对象。(如果您使用 Core Foundation,请使用 CFURLSetResourcePropertyForKey 函数将 kCFURLIsExcludedFromBackupKey 键添加到您的 CFURLRef 对象。)应用此属性可防止将文件备份到 iTunes 或 iCloud。如果您有大量支持文件,您可以将它们存储在自定义子目录中,并将扩展属性仅应用于该目录。
我不能说拒绝,但 NSUserDefaults 几乎肯定是错误的。(它适用于用户偏好数据。)
我建议你看看核心数据。
这是最近的一个论点:http: //sealedabstract.com/code/you-should-use-core-data/
很酷的报价:
如果您在没有链接到 CoreData.framework 的情况下将 3 个以上的对象保存到磁盘,那么您做错了。
希望有帮助。