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内容高度的方法(截取网上的):

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

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好像挺火的. 转一篇之间的文章:

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

iOS_UITableView性能优化那些事的更多相关文章

  1. Mysql性能优化那些事

    ​    ​对于全栈而言,数据库技能不可或缺,关系型数据库或者nosql,内存型数据库或者偏磁盘存储的数据库,对象存储的数据库或者图数据库--林林总总,但是第一必备技能还应该是MySQL.从LAMP的 ...

  2. OO_Unit2 关于性能优化与测试的那些事

    OO_Unit2 关于性能优化与测试的那些事 OO的第2单元到本周也就正式完结了.尽管这个单元的主旋律是多线程,但"面向对象"的基本思想仍然是我们一切架构与优化的出发点与前提.因此 ...

  3. iOS app性能优化的那些事

     iPhone上面的应用一直都是以流畅的操作体验而著称,但是由于之前开发人员把注意力更多的放在开发功能上面,比较少去考虑性能的问题,可能这其中涉及到objective-c,c++跟lua,优化起来相对 ...

  4. app 性能优化的那些事

    来源:树下的老男孩 链接:http://www.jianshu.com/p/5cf9ac335aec iPhone上面的应用一直都是以流畅的操作体验而著称,但是由于之前开发人员把注意力更多的放在开发功 ...

  5. JS性能优化的那点事

    1:减少查找次数,把需要查找的内容先提取出来,全部添加计算完成后,再统一查找一次即可,如下面例子: <script> window.onload = function () { var s ...

  6. C#中那些[举手之劳]的性能优化

    隔了很久没写东西了,主要是最近比较忙,更主要的是最近比较懒...... 其实这篇很早就想写了 工作和生活中经常可以看到一些程序猿,写代码的时候只关注代码的逻辑性,而不考虑运行效率 其实这对大多数程序猿 ...

  7. C++ 应用程序性能优化

    C++ 应用程序性能优化 eryar@163.com 1. Introduction 对于几何造型内核OpenCASCADE,由于会涉及到大量的数值算法,如矩阵相关计算,微积分,Newton迭代法解方 ...

  8. Unity性能优化(4)-官方教程Optimizing graphics rendering in Unity games翻译

    本文是Unity官方教程,性能优化系列的第四篇<Optimizing graphics rendering in Unity games>的翻译. 相关文章: Unity性能优化(1)-官 ...

  9. Unity性能优化(2)-官方教程Diagnosing performance problems using the Profiler window翻译

    本文是Unity官方教程,性能优化系列的第二篇<Diagnosing performance problems using the Profiler window>的简单翻译. 相关文章: ...

随机推荐

  1. Chrome开发者工具详解(2)-Network面板

    Chrome开发者工具详解(2)-Network面板 注: 这一篇主要讲解面板Network,参考了Google的相关文档,主要用于公司内部技术分享. Chrome开发者工具面板 面板上包含了Elem ...

  2. HtmlAgilityPack 删除script、style以及注释标签

    foreach(var script in doc.DocumentNode.Descendants("script").ToArray()) script.Remove(); f ...

  3. Dapper学习 - Dapper的基本用法(一) - 查询

    上一篇, 提到Query<Test>查询的时候, 如果Test中包含自定义class, Dapper不会给自定义class完成映射, 而是直接给null, 其实是可以实现的, 答案就在下面 ...

  4. 关于MySql中的varchar类型

    今天新开始的项目在做数据库设计,发现自己对MySql的varchar类型还不熟悉,故又上网收集资料整理如下. 1.varchar类型的变化 MySQL 数据库的varchar类型在4.1以下的版本中的 ...

  5. 【C#进阶系列】17 委托

    委托主要是为了实 现回调函数机制,可以理解为函数指针(唯一不同的在于多了委托链这个概念). 然而用的时候可以这么理解,但是委托的内部机制是比较复杂的. 一个委托的故事 delegate void ra ...

  6. jquery简单原则器(匹配除了指定选择器之外的元素 selector 表示选择器)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. Scalaz(52)- scalaz-stream: 并行运算-parallel processing concurrently by merging

    如果scalaz-stream真的是一个实用的数据流编程工具库的话,那它应该能处理同时从多个数据源获取数据以及把数据同时送到多个终点(Sink),最重要的是它应该可以实现高度灵活的多线程运算.但是:我 ...

  8. ahjesus 让我的MVC web API支持JsonP跨域

    无数被跨域请求爆出翔来的人 遇到请求成功却不能进入success 总是提示parsererror 参考一下两篇文章吧 参考文章http://www.asp.net/web-api/overview/s ...

  9. 关于jQuery里面的选择器

    一.JQuery选择器的概述 选择器是JQuery的根基,在JQuery中,对事件处理.遍历DOM和Ajax操作都依赖于选择器. 二.选择器的优势 1.简洁的语法 2.支持CSS1.0到CSS3.0选 ...

  10. mysql 5.6 read-committed隔离级别下并发插入唯一索引导致死锁一例

    今天,某个环境又发生了死锁,如下: *** (1) TRANSACTION:TRANSACTION 735307073, ACTIVE 0 sec insertingmysql tables in u ...