所以我之前已经看过这个问题了,事实上我昨晚问了这个问题,但我想我还要再试一次,看看能不能就问题得到任何其他独特见解。
问题 - 我的应用程序在滚动视图中有大量的uiimageviews(图像下载到磁盘),当然它面临两个大问题:内存使用和性能。在我的应用程序内存使用并不是一个问题,因为我正在使用诸如出列和重用imageview等技术。但性能完全是另一回事。现在,作为一个内存保存程序,我只将图像文件路径存储在内存中,因为将图像存储在内存中会很荒谬。但问题是从磁盘读取所需的时间比从内存中读取更多,并且在滚动视图非常上减慢滚动速度。
那么,对于像这样的事情你们有什么样的技巧?我已经看过三个但不想使用它,因为我需要在我的视图中具有高度可自定义性,而这是不可行的。图像文件不大,但只是缩略图大小,因此没有缩放或超出大小。必须有一种直观的方式来处理这个问题。内置的照片应用程序可以完美地处理数千张照片,具有低内存和光滑的滚动性能。
答案 0 :(得分:1)
从根本上说,问题是您可能在UI线程上执行了大量磁盘I / O,这基本上可以保证会导致性能问题。
您应该考虑在后台线程上加载图像,并在加载图像时更新主线程上的图像视图。根据您的使用情况,您可以或多或少地了解提前预加载的距离等,以便您可以准备好图像。 (可能有一些可用的源代码甚至Apple样本代码可以执行类似的操作,但我不知道它是不是最重要的。)
您可能会注意到某些应用程序(不确定照片应用程序)有一个中间阶段,他们为所有图像加载非常小拇指尺寸图像,并将其缩放到渲染大小,在加载完整尺寸版本之前,它充当占位符 - 如果用户在加载完整尺寸之前滚过该图像,则可见效果几乎与图像一直存在时相同。