与NSUserDefaults相比,存储大量图像数据的位置更好



我使用NSUserDefaults通过编码来存储图像数据。我知道它可以保存在Documents目录中,但如果内容太棒,这将导致App Store拒绝,因为iCloud同步问题。它也可以保存在缓存目录中,但我保存的图像非常重要,我不想在缓存清除时丢失它们。

我担心我的应用程序会因为大量使用NSUserDefaults进行数据存储而被拒绝——在离线环境中有其他方法可以处理吗?

NSUserDefaults不适合存储图像。您应该将这些存储在~/Library/Application Support下。既然你说你不想备份它们,你应该按照iOS应用程序编程指南中的说明进行操作:

在iOS 5.1及更高版本中,将支持文件存储在/Library/Application support目录中,并使用setResourceValue:forKey:error:方法将NSURLIsExcludedFromBackupKey属性添加到相应的NSURL对象中。(如果您使用的是Core Foundation,请使用CFURLSetResourcePropertyForKey函数将kCFURIsExcludedFromBackupKey键添加到CFURRef对象中。)应用此属性可防止将文件备份到iTunes或iCloud。如果您有大量的支持文件,可以将它们存储在自定义子目录中,并将扩展属性仅应用于该目录。

我不能说拒绝,但NSUserDefaults几乎肯定是错误的。(用于用户偏好数据。)

我建议您查看核心数据。

最近的一个论点也提出了同样的观点:http://sealedabstract.com/code/you-should-use-core-data/

很酷的引用:

如果您在没有链接到CoreData.framework的情况下将3个以上的对象保存到磁盘,则说明您做得不对。

希望能有所帮助。

这个问题的公认答案可能会有所帮助。

针对您的问题给出的要点:

将文件放入"文档"中,但对其进行标记,以便不对其进行备份。关于如何做到这一点,有一位技术专家(QA1719)。

最新更新