Objective c 由于设置单元格背景图像,iPhone TableView滚动延迟

Objective c 由于设置单元格背景图像,iPhone TableView滚动延迟,objective-c,uitableview,Objective C,Uitableview,我的应用程序中有几个表,其中的数据正在检索,表也在动态更新。我注意到,在设备上,当屏幕上的单元格数量超过屏幕所能容纳的数量时,需要滚动,滚动时会出现延迟 我开始一行一行地检查代码以找到问题,直到我最终找到它 CachedImages *cache = [[CachedImages alloc] init]; UIColor *backgroundColour; if([table getImage] != nil)

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

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

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];
                    }
因此,我正在重用标识符


任何建议都将不胜感激

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

背景不是部分透明的,是吗?有一个关于透明或部分透明的单元格背景导致滚动延迟的已知问题。是的,它是部分透明的。啊,我不知道这个问题,有什么解决办法吗?我只是在没有透明代码的情况下尝试了一下,仍然出现了轻微的延迟