内容简介:之前问到如何优化复杂
之前问到如何优化复杂 UITableViewCell
卡顿的问题, 有位大佬发了下面的一段文字, 在此记录一下
-
1.
cell
的行高不是固定值,需要计算,则要尽可能缓存行高值,避免重复计算行高。因为heightForRowAtIndexPath:
是调用最频繁的方法。 -
2.滑动时按需加载,这个在大量图片展示,网络加载的时候很管用!(
SDWebImage
已经实现异 步加载,配合这条性能杠杠的)。 -
3.正确使用
reuseIdentifier
来重用Cells
-
4.尽量少用或不用透明图层
-
5.如果
Cell
内现实的内容来自web
,使用异步加载,缓存请求结果 -
6.减少
subviews
的数量 -
7.在
heightForRowAtIndexPath:
中尽量不使用cellForRowAtIndexPath:
,如果你需要用到它, 只用一次然后缓存结果 -
8.所有的子视图都预先创建,如果不需要显示可以设置
hidden
,尽量少动态给Cell
添加View
-
9.颜色不要使用
alph
-
10.栅格化
-
11.
cell
的subViews
的各级opaque
值要设成 YES,尽量不要包含透明的子View
opaque
用于辅助绘图系统,表示UIView
是否透明。在不透明的情况下,渲染视图时需要快速 地渲染,以提 高性能。渲染最慢的操作之一是混合(blending
)。提 高性能的方法是减少混合操 作的次数,其实就是GPU
的不合理使用,这是硬件来完成的(混合操作由GPU
来执行,因为这 个硬件就是用来做混合操作的,当然不只是混合)。 优化混合操作的关键点是在平衡CPU
和GPU
的负载。还有就是cell
的layer
的shouldRasterize
要设成YES
。 -
12.
cell
异步加载图片以及缓存 -
13.异步绘制
-
(1)在绘制字符串时,尽可能使用
drawAtPoint: withFont:
,而不要使用更复杂的drawAtPoint:(CGPoint)point forWidth:(CGFloat)width withFont:(UIFont *)font lineBreakMode:(UILineBreakMode)lineBreakMode
; 如果要绘制过长的字符串,建议自己先截 断,然后使用drawAtPoint: withFont:
方法绘制。 -
(2)在绘制图片时,尽量使用
drawAtPoint
,而不要使用drawInRect
。drawInRect
如果在绘 制过程中对图片进行放缩,会特别消耗CPU
。 -
(3)其实,最快的绘制就是你不要做任何绘制。有时通过
UIGraphicsBeginImageContextWithOptions()
或者CGBitmapContextCeate()
创建位图会显 得更有意义,从位图上面抓取图像,并设置为CALayer
的内容。 如果你必须实现-drawRect:
,并且你必须绘制大量的东西,这将占用时间。 -
(4)如果绘制
cell
过程中,需要下载cell
中的图片,建议在绘制cell
一段时间后再开启图 片下载任务。譬如先画一个默认图片,然后在 0.5S 后开始下载本cell
的图片。 -
(5)即使下载
cell
图片是在子线程中进行,在绘制cell
过程中,也不能开启过多的子线程。 最好只有一个下载图片的子线程在活动。否则也会影响UITableViewCell
的绘制,因而影响了UITableViewCell
的滑动速度。(建议结合使用NSOpeartion
和NSOperationQueue
来下载图片, 如果想尽可能找的下载图片,可以把[self.queuesetMaxConcurrentOperationCount:4];
) -
(6)最好自己写一个
cache
,用来缓存UITableView
中的UITableViewCell
,这样在整个UITableView
的生命周期里,一个cell
只需绘制一次,并且如果发生内存不足,也可以有效的 释放掉缓存的cell
。
-
-
14.不要将
tableview
的背景颜色设置成一个图片。这回严重影响UITableView
的滑动速度。在 限时免费搜索里,我曾经翻过一个错误:self.tableView_.backgroundColor = [UIColorcolorWithPatternImage:[UIImageimageNamed:@"background.png"]];
通过这种方式 设置UITableView
的背景颜色会严重影响 UTIableView 的滑动流畅性。修改成self.tableView_.backgroundColor = [UIColor clearColor];
之后,fps
从43
上升到60
左右。 滑动比较流畅。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。