我使用coredata创建了几个应用程序,我在sqlite中存储图像,但在某个地方我发现它很糟糕。我搜索了网,但我发现的只是这个建议:
所以我的问题是:在sqlite数据库中将图像保存为NSData
的优缺点是什么,并且在图像保存在文件系统中时只存储图像的引用?
答案 0 :(得分:7)
Apple在Core Data Performance指南中就此主题提供了一些指导。一般来说,虽然SQLite可以很好地扩展,并且可以轻松处理大小为几千兆字节的数据库,但是大型二进制blob不可查询或可索引,并且几乎不会返回数据库的大小。
如果您的目标是iOS 4及更高版本,则可以在包含此类数据的属性上设置“Allows External Binary Data Storage”标记,Core Data会自动将它们分别存储在文件系统中(如果它认为合适) ),并自动管理数据存储中该数据的链接。
答案 1 :(得分:1)
好处:不太确定,但我可以想到在数据库中存储链接的几个好处。
与文件系统的本机代码交互将比SQLite图像提取更快。 (整体表现更快)
清洁且可扩展的数据库 - (关注大小,迁移会更容易)
答案 2 :(得分:1)
您可能想要查看我得到的答案,以获得类似的主题(如果不是相同的话)。因为你我只找到了提供建议的人,但没有人真正提供基准和真正的技术答案。
Provide example for why it is not advisable to store images in CoreData?
除此之外,我的应用程序已经在db中实现了所有图像,然后运到app store, 我可以告诉你,如果你使用iCloud,事情会更容易。如果您在UITableView中使用带有缩略图图标的小图像,则可以完全避免异步图像加载。
只有一个建议,为每个图像大小提供一个实体,而不是将所有建议存储在附加到主实体的集合中。
我发现使用iCloud时唯一的缺点是每次更改图像时生成的事务日志都会更大。但在我看来,图像很小,而且更新图像的需求很少。此外,iCloud + CoreData目前非常多,所以我在发货前将其删除,所以目前对我来说真的不是问题。