你的位置:首页 > 操作系统

[操作系统]iOS_UITableView性能优化那点事


UITableView在实际开发中使用频率实在是很高, 因此, UITableView的性能优化是必不可少的, 本文下面就略微总结一下UITableView性能优化那点事.

 

本文着重介绍具体方法, 原理的话在文章最后会给出一些链接, 有兴趣可以自行查看.

 

1. 关于数据绑定

很多新加入iOS的朋友喜欢把数据绑定写入在UITableView Data Source方法 

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath

里面. 这并不是十分之准确的, 因为这时候的cell还没有被实际产生, 试着把数据绑定写在 

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath;

这个方法上, 因为这时候cell已经被创建而且正在准备显示到界面上了.

 

2. 关于cell的重用.

cell的重用是苹果官方就一再推荐的, 所以保证自己创建的cell是重用的会对性能提升有很大的帮助.

 

3. 关于高度计算

高度计算的方法如果调用多次, 对性能损耗是肯定的. 当然如果你的高度是定死的话, 就不会出现这个问题. 如果不是的话, 那么你可能需要自己设计一个方法, 把每个需要显示的cell的高度先计算出来, 然后再设置cell高度的时候直接调用.

提供一个计算cell内容高度的方法(截取网上的):

image

然后高度设置可以在下面实现:

image

 

4. 关于AutoLayout

尽管苹果官方推荐使用autoLayout进行程序开发, 但是autoLayout会带来性能的一些损耗, 当然, 如果你的程序对性能要求不是很高的话, 用autoLayout进行开发也是很方便的.

 

5. 关于CPU和GPU的调度使用

各种透明度, 圆角等layer的属性都会引起性能损耗.

所以, 可以试着不要直接设置图片的圆角, 先异步获取图片, 调用CoreGraphics 处理好图片再返回

这样你的图片处理就交给了后台而不会影响到你程序的流畅性了

 

6. 关于其他优化方法

可以试着使用这个 https://github.com/facebook/AsyncDisplayKit 框架, 框架集成了大量异步操作, 把UIView -> CALayer 转变成 CAlayer -> Node, 这样的轻量级控件加上异步操作, 会使你的程序性能更上一层楼.

 

 

附上一些链接:

1. http://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/

2. http://southpeak.github.io/blog/2015/12/20/perfect-smooth-scrolling-in-uitableviews/

 

然后推荐几个喜欢的技术博客吧:

1. http://blog.ibireme.com

2. http://www.superqq.com

3. http://southpeak.github.io

 

最后, 最近apple pay好像挺火的. 转一篇之间的文章:

http://www.cnblogs.com/easyToCode/p/5196328.html