1

所以我以前看过这个问题,事实上我昨晚问过这个问题,但我想我会再试一次,看看我是否能对这个问题有任何其他独特的看法。

问题——我有一个在滚动视图中有大量 uiimageviews(图像下载到磁盘)的应用程序,它当然面临两个大问题:内存使用和性能。在我的应用程序中,内存使用并不是什么大问题,因为我使用了诸如出列和重用图像视图等技术。但性能完全是另一回事。现在,作为一个内存节省程序,我只将图像文件路径存储在内存中,因为将图像存储在内存中会很荒谬。但是这个问题是从磁盘读取比从内存中读取更多的时间,并且极大地减慢了滚动视图的滚动速度。

那么,你们中的任何人都建议使用什么样的技术来解决这样的问题?我见过three20,但不想使用它,因为我认为我需要高度可定制性,而那是行不通的。图像文件不大,只是缩略图大小,因此没有缩放或过大。必须有一种直观的方式来处理这个问题。内置的照片应用程序可以完美地处理多达数千张照片,具有低内存和流畅流畅的滚动性能。

4

1 回答 1

1

从根本上说,问题在于您可能在 UI 线程上执行了一堆磁盘 I/O,这基本上可以保证会导致性能问题。

您应该考虑在后台线程上加载图像并在加载图像时更新主线程上的图像视图。根据您的用例,您可以或多或少地了解提前预加载多远等,以便您可以准备好图像。(可能有一些可用的源代码,甚至是 Apple 示例代码,它们可以做这样的事情,但我不知道它是否在我的脑海中。)

您可能会注意到某些应用程序(不确定照片应用程序)有一个中间阶段,它们会为所有图像加载一个非常小的拇指大小的图像,并将其放大到渲染大小,它充当占位符,直到完整大小的版本已加载——如果用户在加载完整尺寸之前滚动过该图像,则可见效果几乎与图像一直在那里一样。

于 2010-08-22T17:53:13.160 回答