1

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

我开始逐行检查我的代码以找到问题,直到我最终找到它

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];
                    }

所以我正在重用标识符。

我们欢迎所有的建议

4

1 回答 1

0

我能想出的最佳解决方案是在屏幕出现之前预加载图像,因此它不必一直从缓存中获取它。这基本上解决了这个问题,第一次加载屏幕时会有一点延迟,但之后就很流畅了。到目前为止我找到的最佳解决方案

于 2013-01-23T11:40:35.800 回答