2

我正在构建一个应用程序,该应用程序需要在 uitableviewcell 的图像视图中显示一堆本地图像。但是,我很难优化 uitableview 的性能。我特别注意到两个问题:首先,视图需要一段时间才能加载。其次,当显示新单元格时,滚动会变得迟钝。

viewDidLoad 正在像这样加载图像:

for (Object *object in self.objects)
{
    object.thumbnail = [UIImage imageNamed:object.imageName];
}

这显然会导致长时间加载问题,但我不确定如何加载这些图像。是尺寸问题吗?这只是一种不好的做法吗?

显示图像的过程似乎也有问题,换句话说,即使将图像分配给缩略图属性,它们仍然需要很长时间才能绘制出来。

虽然这是一个特定的案例,但我对苹果如何如此有效地加载照片中的图像感到好奇。有什么见解吗?谢谢

4

3 回答 3

1

每当我发现我的 UI 滞后时,我首先怀疑的是我正在同步执行一些操作(在主线程上),而这些操作应该异步执行(在后台线程上)。

我也很好奇苹果是如何在照片应用程序中实现这一性能的。我正在编写一个与您的要求相似的应用程序。我目前的方法是在用户打开我的视图控制器后立即将一堆照片从磁盘异步加载到内存中,并在用户滚动时继续从内存中加载(并删除照片)。

目前,我将磁盘中的每张照片异步加载到索引路径处的行的单元格中,这非常快,但是如果您快速滚动表格视图,则会导致这种级联效果发生。也就是说,在照片出现之前,单元格将显示为空片刻。

我希望这对你有所启发。

您可能也有兴趣尝试 SDWebImage - 它包括一个图像缓存对象,在处理本地照片时让我的生活变得更轻松。

于 2014-01-30T16:55:02.367 回答
0

他们很可能在各种分离的线程上在后台做所有事情。这将允许托管/呈现大量信息的应用程序具有很大的流动性。我自己在各种应用程序中创建了一个照片库,从不同的 Web API 和诸如此类的同时加载许多照片,并且通过简单地创建新线程并高效准确地管理分配,您可以获得非常流畅的界面/交互

于 2012-11-20T20:32:56.670 回答
0

好吧,长时间加载问题是由您的这部分代码引起的 - UIImage imageNamed:,因为此方法将所有图像缓存在同一线程上,并且如果内存过载也可能导致应用程序崩溃。

试试看这个库 - 它应该做你想要达到的目标:) http://www.cocoacontrols.com/platforms/ios/controls/ktphotobrowser

于 2012-11-20T20:33:38.937 回答