iOS开发之 tableView 优化

UITableView最核心的思想就是UITableViewCell的重用机制。简单的理解就是:UITableView只会创建一屏幕(或一屏幕多一点)的UITableViewCell,其他都是从中取出来重用的。每当Cell滑出屏幕时,就会放入到一个集合(或数组)中(这里就相当于一个重用池),当要显示某一位置的Cell时,会先去集合(或数组)中取,如果有,就直接拿来显示;如果没有,才会创建。这样做的好处可想而知,极大的减少了内存的开销。

举个例子来说:如果现在要显示100个Cell,当前屏幕显示5个。那么刷新 dUITableView时,UITableView会先调用100次tableView:heightForRowAtIndexPath:方法,然后调用5次tableView:cellForRowAtIndexPath:方法;滚动屏幕时,每当Cell滚入屏幕,都会调用一次tableView:heightForRowAtIndexPath:、tableView:cellForRowAtIndexPath:方法。

优化主要从三个方面入手:

• 提前计算并缓存好高度(布局),因为heightForRowAtIndexPath:是调用最频繁的方法。

• 异步自定义绘制,遇到复杂界面,遇到性能瓶颈时,可能就是突破口。

• 滑动时按需加载,这个在大量图片展示,网络加载的时候很管用!(SDWebImage已经实现异步加载,配合这条性能杠杠的)。


除了上面最主要的三个方面外,还有很多几乎大伙都很熟知的优化点:

• 正确使用reuseIdentifier来重用Cells 

• 尽量使所有的view opaque,包括Cell自身 

• 尽量少用或不用透明图层

• 如果Cell内现实的内容来自web,使用异步加载,缓存请求结果

• 减少subviews的数量

• 在heightForRowAtIndexPath:中尽量不使用cellForRowAtIndexPath:,如果你需要用到它,只用一次然后缓存结果

• 尽量少用addView给Cell动态添加View,可以初始化时就添加,然后通过hide来控制是否显示

你可能感兴趣的:(iOS开发之 tableView 优化)