如何在Core Data中存储图像?

don*_*ile 6 iphone core-data

只是一个猜测:我创建一个属性并使其类型为"二进制".但最后,我将如何使用它?我猜幕后有一个NSData?那么该属性实际上需要一个NSData?

Mar*_*rra 18

这个问题已被多次询问,答案有点复杂.

在二进制数据方面,您应该根据您将要使用的数据的预期大小来确定如何存储它.规则是:

  • 小于100K;在主表中存储为二进制属性
  • 不到1M; 存储为辅助表中的二进制属性,以避免过度获取
  • 大于1M; 存储在磁盘上并将其文件路径存储在Core Data表中.

此外,在存储图像时,建议以标准格式存储图像,例如JPG或PNG.通过使用transformable属性类型,您实际上可以让子UIImage类在实际存储是PNG表示时给出访问类的外观.我在Cocoa Is My Girlfriend的沼泽帖中详细介绍了这一点.

更新

在磁盘上存储> 1M二进制数据背后的原因是缓存.在NSPersistentStoreCoordinator将保持数据的缓存,这样,当您的应用程序请求"下一个"对象并不需要返回到磁盘.此缓存非常有效.但它在iOS上很小,非常小.如果你输入一大块二进制数据,你可以轻松地吹掉整个缓存,你的整个应用程序都会受到很大影响.