我正在尝试提高我们应用程序中滚动的性能。我遵循了所有普遍接受的建议(用 CG 自己绘制,单元格不透明,没有子视图等),但是当我们有后台 CPU 和网络活动时,它有时仍然卡顿。
此处说明了一种解决方案:
http://www.fieryrobot.com/blog/2008/10/08/more-glassy-scrolling-with-uitableview/
是缓存单元格的位图快照,我们尝试过。但是位图很模糊,占用了大量内存(每个大约几百 kb)。
该链接评论中的一个建议是使用 CGLayer 或 CALayer(?) 缓存单元,因为它们会进入显卡的内存。那么几个问题,
1)有人试过吗?示例代码?
2)iphone/ipod touch显卡有多少内存?这有道理吗?
3) 任何其他加快速度的建议?
更多信息
我使用 CPU 采样器(在电话上)并系统地从电池中消除了一些东西以找出问题所在。一些东西:
1)这不是细胞的设置。如果我只删除绘图调用(drawinrect 等),但离开设置,它是玻璃状的。
2)它不是最小图像(25x25 png)的绘图,如果我把它放进去就可以了。
3)如果我添加第二个或第三个图像(第一个是 320x1004kB 的大背景,另一个是 61x35 4kB 的按钮图像)它会结结巴巴。我在一个类方法中同时获取 UIImages,所以它被缓存了。
4)文字也是一个问题。看起来 drawRect 将 75% 的时间花在了我正在使用的三个 NSString drawInRect 方法上。喜欢:
[mytext drawInRect:drawrect withFont:myFont lineBreakMode:UILineBreakModeTailTruncation];
这些电话似乎通过 webcore,也许这会导致一些口吃?我需要能够格式化两行文本和一小段文本。我需要能够用省略号截断文本。我可以在关键路径之外执行这些并缓存它们吗?我可以用层做那部分吗?