我的应用程序中有几个表,其中数据正在检索,表格动态更新。我注意到在设备上,当屏幕上有比屏幕更多的单元格时,所以需要滚动,滚动时会滞后。
我开始逐行浏览我的代码以找到问题直到我最终找到它
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];
}
所以我正在重复使用标识符。
非常感谢任何建议
答案 0 :(得分:0)
我能想出的最佳解决方案是在屏幕出现之前预先加载图像,因此不必继续从缓存中获取图像。这大多已经解决了这个问题,第一次屏幕加载时会出现轻微的延迟,但之后就会很平滑。到目前为止我找到的最佳解决方案