我正在构建一个应用程序,需要在uitableviewcell的imageview中显示一堆本地图像。但是,我在优化uitableview的性能方面遇到了困难。我特别注意到两个问题:首先,视图需要一段时间才能加载。其次,当显示新单元格时,滚动会变得滞后。
viewDidLoad正在加载如下图像:
for (Object *object in self.objects)
{
object.thumbnail = [UIImage imageNamed:object.imageName];
}
这显然会导致长时间负载问题,但我不确定如何加载这些图像。这是一个尺寸问题吗?这只是一种糟糕的做法吗?
显示图像的过程似乎也存在问题,换句话说,即使将图像分配给缩略图属性,它们仍然需要很长时间才能被绘制。
虽然这是一个特例,但我更加关注苹果如何有效地加载照片中的图像。任何见解?感谢
答案 0 :(得分:1)
每当我发现我的UI滞后时,我怀疑的第一件事就是我正在同步执行一些操作(在主线程上)应该异步执行(在后台线程上)。
我也非常好奇Apple如何在照片应用程序中实现这一性能。我正在编写一个与您现在有类似要求的应用程序。我目前的方法是在用户打开视图控制器后立即异步地将一堆照片从磁盘加载到内存中,并在用户滚动时继续从内存中加载(并从照片中删除照片)。
目前,我在单元格中异步加载来自磁盘的每张照片以获取索引路径中的行,这非常快,但如果您在表格视图中快速滚动,则会导致此级联效果。也就是说,在照片出现之前,单元格将显示为空。
我希望这能为你提供一些启示。
您可能也有兴趣尝试SDWebImage - 其中包含一个图片缓存对象,在处理本地照片时让我的生活更轻松。
答案 1 :(得分:0)
他们最有可能在后台处理各种分离线程。这将在托管/呈现大量信息的应用程序中实现大量流动性。我自己在各种应用程序中创建了一个照片库,同时从不同的Web API和诸如此类的东西加载了许多照片,通过简单地创建新线程并高效准确地管理分配,您可以获得非常流畅的界面/交互
答案 2 :(得分:0)
好吧,长时间加载的问题是由代码的这一部分引起的 - UIImage imageNamed:
,因为这个方法会在同一个线程上缓存所有图像,如果内存过载,也可能导致应用程序崩溃。 / p>
尝试查看这个库 - 它应该做你想要实现的:) http://www.cocoacontrols.com/platforms/ios/controls/ktphotobrowser