存储图像在sqlite或只是一个参考?

我已经使用coredata做了几个应用程序,我在sqlite中存储图像,但在某处我发现它是不好的。 我search了networking,但我发现这个build议是:

  • 图像大小<100kb与相关数据存储在同一个表中
  • 图像大小<1MB存储在通过关系附加的单独表格中以避免不必要的加载
  • 图像大小> 1MB存储在磁盘上,并在核心数据内引用它

所以我的问题是:什么是优点和缺点在NSData中保存图像在sqlite数据库,并存储只是一个引用的图像,而图像保存在文件系统?

苹果公司在其关于核心数据性能的指南中提供了一些关于这个主题 一般来说,尽pipeSQLite可以很好地扩展,并且可以容易地处理大小为GB的数据库,但是大的二进制blob不是可查询或可索引的,并且使得数据库的大小膨胀得很less。

如果您的目标是iOS 4或更高版本,则可以在包含此类数据的属性上设置“ 允许外部二进制数据存储 ”标志,并且核心数据将自动将其分别存储在文件系统上(如果认为合适)自动pipe理数据存储中的数据链接。

好处:不太确定,但是我可以考虑在数据库中存储链接的好处。

  1. 本地代码与文件系统的交互将比SQLite镜像获取更快。 (整体性能更快)

  2. 清洁和可扩展的数据库 – (大小是关注,迁移将更容易)

你可能想检查我得到的答案,如果不是相同的话题。 因为你们我只find人提供build议,但没有人真正提供基准和真正的技术答案。

提供示例为什么不build议在CoreData中存储图像?

除此之外,我的应用程序已经实现了与所有图像在数据库中,并运到app store,我可以告诉你,事情更容易,如果你使用iCloud。 如果您在缩略图图标中使用UITableView中的小图像,则可以完全避免asynchronous图像加载。

只有一个build议,为每个图像大小提供一个实体,而不是将其全部存储在附属于主实体的集合中。

我发现,使用iCloud唯一的缺点是每次更改图像时生成的更大的事务日志。 但在我的情况下,图像很小,更新图像的需求很less。 另外,iCloud + CoreData目前相当有问题,所以在发货之前将其删除,因此目前对我来说确实不成问题。