由于设置单元格背景图像,iPhone TableView滚动滞后

时间:2013-01-10 14:29:24

标签: objective-c uitableview

我的应用程序中有几个表,其中数据正在检索,表格动态更新。我注意到在设备上,当屏幕上有比屏幕更多的单元格时,所以需要滚动,滚动时会滞后。

我开始逐行浏览我的代码以找到问题直到我最终找到它

CachedImages *cache = [[CachedImages alloc] init];
                    UIColor *backgroundColour;
                    if([table getImage] != nil)
                    {
                        backgroundColour = [[UIColor alloc] initWithPatternImage:[cache getImageByPath:[[table getImage] getName]]];
                    }

cell.backgroundColor = [backgroundColour colorWithAlphaComponent:fOpacity];

(我有一个表类,用于存储表信息,如背景图像和数据)

特别是这一行

cell.backgroundColor = [backgroundColour colorWithAlphaComponent:fOpacity];

如果我注释掉一行,那么表格会完美滚动,但是当我取消注释它时,它会导致滞后问题。所以为了围绕这个,我设置了一个实例变量,它存储了表的背景颜色,并从委托方法中删除了缓存的图像代码,所以它在表之前加载,所以它不必继续拉它每次需要重新绘制一个单元格时从缓存中恢复。

这主要解决了这个问题,当我第一次访问屏幕并向下滚动时,它有点滞后,但在初始滚动到底部后,性能很好。无论如何都要防止这种初始延迟,我已经将所有繁重的渲染移出了委托方法,但是这个图像代码在用户第一次进入屏幕时仍然会引起轻微的延迟。

关于如何防止这种情况的任何想法?该表是一个自定义表,我就像这样设置

  NSString *CellIdentifier = @"CustomCellIdentifier";
                    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
                    if (cell == nil)
                    {
                        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCellView" owner:self options:nil];
                        cell = [nib objectAtIndex:0];
                    }

所以我正在重复使用标识符。

非常感谢任何建议

1 个答案:

答案 0 :(得分:0)

我能想出的最佳解决方案是在屏幕出现之前预先加载图像,因此不必继续从缓存中获取图像。这大多已经解决了这个问题,第一次屏幕加载时会出现轻微的延迟,但之后就会很平滑。到目前为止我找到的最佳解决方案