UITableView平滑滚动性能

5

当加载图片时,为什么UITableView滚动起来会如此卡顿?是因为需要将它们添加为子视图吗?还是因为需要缓存图片?还是两者都有影响?

2个回答

6
因为它们被添加为子视图,而绘制子视图需要进行合成,所以这是一项繁重的工作。当Core Graphics或Core Animation绘制带有这些子视图的多个单元格时,情况更加复杂。
Loren Brichter(atebits)在博客中解释得更好:
与Mac OS X一样,在iPhone上有两种绘图系统。一种是CoreGraphics,另一种是LayerKit CoreAnimation。CoreGraphics在CPU上进行绘图,CoreAnimation在它认为最快的地方进行绘图,很可能是GPU。
iPhone上的GPU不喜欢混合,这就是为什么苹果建议您尽可能保持视图的不透明性。有时您别无选择 - 如果您在图像上有一个标签,则必须使标签透明,否则文本周围会出现一个丑陋的大块。
开发人员该怎么办?当然是预先混合……使用CoreGraphics进入您自己的视图。如果您将自己的内容混合到单个静态视图中,可以在需要时(例如,当表视图将单元格移动到屏幕上时)稍微增加一点开销,但是每个帧之后,CoreAnimation只处理一个大的、不透明的纹理……它很喜欢。这不仅仅是混合。如果您考虑重绘中发生的情况,每个表格单元只有一个大视图是一个巨大的胜利,因为CoreAnimation只会在屏幕上触摸单个给定像素一次,而不是多次(可能取决于旧视图层次结构有多少重叠)。

那个链接似乎挂了 :( 不过我可能错了,因为我在私人网络上。 - GoodSp33d
1
@GoodSp33d:你说得对,atebits.com已经挂了好几年了。幸好它被存档了;我现在已经编辑了我的回答。 - BoltClock

0

请将以下有关编程的内容从英语翻译成中文。只返回已翻译的文本:请不要在答案中添加应用链接或签名。 - iwasrobbed
感谢您抽出时间提出请求。我很高兴撤销我的签名。最好的问候。 - camilo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接