0

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

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

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

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

我正在使用 aNSFetchedResultsController来获取消息,并且一次获取的消息不超过 30 条。我试图通过创建一个MessageImage对象(也是 的子类NSManagedObject)来存储UIImage.
一个Message对象与 具有一对一的关系MessageImage,我这样做是为了当 fetcher 从 Core Data 加载 30 条消息时,UIImage 本身在请求之前不会被加载。但我仍然表现不佳......

所以第二个问题是:
我能做些什么来提高滚动性能?

4

2 回答 2

2

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

于 2012-07-21T19:25:52.113 回答
1

我想好的做法是不要将图像存储在比图标大小大的核心数据中。将它们存储在文件系统中。性能方面:您可以使用 GCD 在后台加载图像,然后在加载后立即在主线程上显示它们。看看这里使用块从后台线程加载图像

于 2012-07-21T19:23:08.777 回答