使用Core Data图像填充tableView

时间:2012-07-21 19:17:08

标签: iphone objective-c ios core-data uiimage

我正在开发一个消息传递应用程序(类似于WhatsApp),用户可以相互发送文本和图像消息。

我创建了一个Message对象,NSManagedObject的子类,用于存储以下消息详细信息:
sender_name,timestemp,message_text和message_image(用于图像消息)
*图像的平均大小类似于从iPhone相机胶卷库中拍摄的图像的大小。

第一个问题是:
将图像保存到Core Data是个好主意还是将它们保存到文件系统更好?

问题是,当我在聊天视图中并且我滚动tableView以查看旧消息时,当从核心数据加载图像时,滚动性能变得非常糟糕。

我正在使用NSFetchedResultsController来获取消息,而我一次不会获取超过30个消息。我尝试通过创建MessageImage对象(也是NSManagedObject的子类)来提高性能,以存储UIImageMessage对象与MessageImage具有一对一的关系,我这样做是因为当fetcher从Core Data加载30条消息时,UIImage本身在被请求之前不会被加载。但是我的表现仍然不好......

所以第二个问题是:
如何改善滚动效果?

2 个答案:

答案 0 :(得分:2)

创建图像的缩略图,这些缩略图是滚动视图中缩放的确切尺寸。这样您就不会读取所有高分辨率图像,也不必缩放它们。您可以使用Core Data或文件系统存储缩略图。我不认为会有很大的不同。但绝对将高分辨率原件存储在文件系统上。当用户点击图像时,您可以加载它们并显示原始的全屏。

答案 1 :(得分:1)

我认为良好的做法是不将图像存储在大于 - 比如图标大小的核心数据中。将它们存储在文件系统中。 性能方面:您可以使用GCD在后台加载图像,然后在加载后立即在主线程上显示它们。 看看loading images from a background thread using blocks