iOS_UITableView性能优化那些事
2016-02-19 11:31
459 查看
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内容高度的方法(截取网上的):
![](https://cdn-images-1.medium.com/max/2000/1*l_1bUrp8OzZcS5cHdnaGvw.png)
然后高度设置可以在下面实现:
![](https://cdn-images-1.medium.com/max/2000/1*keqsdc6XFmEOdmI4w10zrA.png)
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
4. http://www.cnblogs.com/dsxniubility
最后, 最近apple pay好像挺火的. 转一篇之间的文章:
/article/5232188.html
本文着重介绍具体方法, 原理的话在文章最后会给出一些链接, 有兴趣可以自行查看.
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内容高度的方法(截取网上的):
![](https://cdn-images-1.medium.com/max/2000/1*l_1bUrp8OzZcS5cHdnaGvw.png)
然后高度设置可以在下面实现:
![](https://cdn-images-1.medium.com/max/2000/1*keqsdc6XFmEOdmI4w10zrA.png)
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
4. http://www.cnblogs.com/dsxniubility
最后, 最近apple pay好像挺火的. 转一篇之间的文章:
/article/5232188.html
相关文章推荐
- jqtransform.jsのonchangeの仕方、valueの変え方
- iOS开发UI篇—核心动画(UIView封装动画)
- iOS UIDocumentInteractionController 设置第三方打开方式的 参数详解
- Vue + webpack 项目实践
- UISearchController的简单实用
- UIDocumentInteractionController 第三方应用中打开自己的文件 方法
- Java Map 按key排序和按Value排序
- UiAutomator2自动化测试环境搭建
- Android学习路线(二十)运用Fragment构建动态UI
- 基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用
- 关于EasyUI Datagrid JSON对象内嵌对象的取值问题
- android 键盘弹起 UI上移
- java.lang.ClassNotFoundException: filter.FiltrateRequestParamterFilter
- UITableView拉伸效果
- Android SDK Tools Platform-tools Build-tools
- state/ui-router
- 实现easyui的datagrid导出为excel
- 使用UIBezierPath和CAShapeLayer画各种图形 (转)
- HUE配置
- Supervised Sequence Labelling with Recurrent Neural Networks