现在市场上的iOS应用程序界面中使用最多的UI控件是什么? 答案肯定是UITableView,几乎每一款App都有很多的界面是由UITableView实现的,所以为了做出一款优秀的App,让用户有更好的体验效果,如何做好tableView的优化将是很重要的一环.

>1. 要保证滚动tableView时,让用户有良好的体验,需要确保刷新帧率应该在 50+/s 才可以!(instrument中CoreAnnimation中可查看)
>2. 不能因为cell展示不必要的内容浪费时间,出现跳帧现象,导致画面不连续,y也就是说在两帧刷新之间,表格的运算必须做完, 一句话:要想滚动tableView时,能够非常流畅,最关键的是在创建cell或者从缓存池取cell时,让系统花费最少的时间,即尽可能的减少显示cell的计算量.

tableView的性能优化可以从下面几个方面着手: 1.行高一定要缓存!!! 2.不要动态创建子视图 3.所有的子视图都应该添加到 contentView 上 4.所有的子视图都必须指定背景颜色 5.所有的颜色都不要使用 alpha 6.cell 栅格化 7.异步绘制 8.tableview加载图片的时候使用lazy(懒加载)模式和异步加载模式 9.正确使用reuseIdentifier来重用Cells

一一进行讲解: 1.行高要缓存 举个简单的栗子: 如果现在要显示100个Cell,当前屏幕显示5个。那么全局刷新UITableView时, UITableView会先调用100次tableView:heightForRowAtIndexPath:方法,然后调用5次 tableView:cellForRowAtIndexPath:方法;滚动屏幕时,每当Cell滚入屏幕,都会调用 一次tableView:heightForRowAtIndexPath:和tableView:cellForRowAtIndexPath:方 法。 所以说要提前计算并缓存好高度,因为heightForRowAtIndexPath:是调用最频繁的方法,如果是使用MVVM搭建框架,可以在viewModel中添加行高属性,提前计算好行高.

2.不要动态创建子视图 意思是:cell所有的子视图都预先在初始化方法中创建,如果根据实际情况不需要显示的可以设置 hidden.这样能尽可能的减少cell创建或从缓存池取时因为布局子控件所消耗的时间.

3.所有的子视图都应该添加到 contentView 上 这一条和tableView的性能优化其实没多少关系,但添加到contentView中,当侧滑cell需要删除或编辑这行数据时更好操作.

4.所有的子视图都必须指定背景颜色 相信很多程序员在开发时经常会遇到这种情况,当从某个控制器A跳转到下一个控制器B时,若B控制器的view未设置背景颜色,跳转时会有卡顿现象,cell也一样,若控件未指定背景颜色,会影响tableView滚动的流畅度.

5.所有的颜色都不要使用 alpha 因为控件如有透明度,会显示底部控件的部分轮廓,系统在显示cell时,需要计算各控件间的叠加面积,颜色的透明度等;但如果所有控件颜色不透明,则不需要耗费性能去计算,能节省大量时间.

6.cell 栅格化 栅格化,是UI设计师的术语:是将 cell 中的所有内容,生成一张独立的图像,在屏幕滚动时,只显示图像 设置属性 self.layer.shouldRasterize = YES;即可 栅格化的同时必须指定分辨率,否则默认使用 1倍的scale 生成图像! 需要设置 self.layer.rasterizationScale = [UIScreen mainScreen].scale;

7.异步绘制 异步绘制!如果 cell 比较复杂,可以设置cell图层的属性 self.layer.drawsAsynchronously = YES;

8.tableview加载图片的时候使用lazy(懒加载)模式和异步加载模式 举个栗子,当我们在用新闻类的App时,滑动cell时看新闻时,并不是所有的都是我们感兴趣的,有时候我们只是很快的滑过,想要快速的略过不喜欢的内容,但实际上只要滑动经过了的cell中的图片就开始加载了,这样用户使用起来会出现不同程度的卡顿,用户体验不太好,而且浪费内存和流量 此时,我们就可以利用lazy加载技术,当界面滑动或者滑动减速的时候,都不进行图片加载,只有当用户不再滑动并且减速效果停止的时候,才进行加载.

9.正确使用reuseIdentifier来重用Cells 当一个tableView中有多种类型的cell时,需要定义不同的重用标识,确保在缓存池正确找到重用的cell.

 

关于tableView的优化的更多相关文章

  1. TableView的优化

    一:什么是TableView的优化以及为什么要优化 1)CPU(中央处理器)和GPU(图形处理器):CPU主要从事逻辑计算的一些工作:GPU主要从事图形处理方面的工作. 2)CPU和GPU的共同点: ...

  2. iOS之tableView性能优化/tableView滑动卡顿?

    本文围绕以下几点展开tableView性能优化的论述? 1.UITableViewCell重用机制? 2.tableView滑动为什么会卡顿? 3.优化方法? 4.总结 1.UITableViewCe ...

  3. TableView 的优化

    TableView 的优化 1      TableView 优化的原理: 当我们用APP 访问新闻的时候,新闻中的内容并不是我们都喜欢的内容,因此我们会快速的滑过,但是TableView的加载机制是 ...

  4. tableView性能优化

    针对滑动时出现卡的现象 参考:http://blog.sina.cn/dpool/blog/s/blog_b638dc890101ep3x.html?plg_nld=1&plg_auth=1& ...

  5. iOS | TableView的优化

    TableView是iOS组件中最常见.最重要的组件之一,在开发中常常用到,所以对其进行优化是一项必不可少的基本功. 主要从几个最常用的方面来对其优化: 1.重用机制 重用机制是cell最基础的一项优 ...

  6. iOS tableview性能优化及分析

    1.最常用的就是cell的重用, 注册重用标识符 每次滑动cell时需要先去缓存池中寻找可循环利用的cell,如果没有则再重新创建cell 2.减少cell中控件的数量 view对象尽量缩减控件的数量 ...

  7. TableView的性能优化

    现在市场上的iOS应用程序界面中使用最多的UI控件是什么? 答案肯定是UITableView,几乎每一款App都有很多的界面是由UITableView实现的,所以为了做出一款优秀的App,让用户有更好 ...

  8. UITableView优化

    作为iOS开发,UITableView可能是平时我们打交道最多的UI控件之一,其重要性不言而喻. 关于TableView,我想最核心的就是UITableViewCell的重用机制了. 简单来说呢就是当 ...

  9. iOS-UITableView的优化(纯手打原创)

    TableView的优化 一:什么是TableView的优化以及为什么要优化 1)CPU(中央处理器)和GPU(图形处理器)   CPU主要从事逻辑计算的一些工作 GPU主要从事图形处理方面的工作 2 ...

随机推荐

  1. 内网Linux对公网开启SSH

    1.首先你得装个Linux,过程就不说了.Linux可以装在Vmware上,但是网络适配器选项选的是桥接模式 2.在linux上安装SSH服务,如果有就自动忽略 3.在路由器上开启端口映射. 这里我用 ...

  2. rman异机恢复(RAC双节点恢复到单节点)

    一.数据库全备 RUN {ALLOCATE CHANNEL ch00 DEVICE TYPE disk;ALLOCATE CHANNEL ch01 DEVICE TYPE disk;backup as ...

  3. dedecms不安全啊

    两个站都早被黑了,没心弄了.该注意的都注意了,除了没定期升级.不靠谱啊.开源软件的安全性是个大问题.

  4. [Android疑难杂症]动态改变Background后Padding无效的问题

    前言 在Layout中指定好background和padding以后,程序里面动态修改background之后padding就失效了,貌似是一个BUG,这里找到了一篇英文文章,简单翻译分享一下. 声明 ...

  5. (转)Log4net 配置类库

    原文地址:http://blog.csdn.net/pfe_nova/article/details/20072137 1.单文件日志 对于单文件的日志,封装代码如下: public enum Log ...

  6. (转)将access数据库迁移到SQLserver的两种方法

    在实际项目使用中遇到的问题,将原文整理后以备后用. 原文地址(具体链接几次未知):http://www.jb51.net/article/41956.htm 方法1 使用ACCESS2007自带的数据 ...

  7. Linux场景下的辅助命令操作汇总

    ============================================ 1.客户端: SecureCRT 7.1 或者putty 2.FTP 主要是上传文件往Linux,否则我们就的 ...

  8. ASP.net 探针

    <%@ Page Language="JScript" ContentType="text/html" ResponseEncoding="gb ...

  9. 转载:LoadRunner11-遇到问题及解决办法

    转自:http://4951507.blog.51cto.com/4941507/1108733 1.LoadRunner超时错误:在录制Web服务器端,如果超过120秒服务器协议脚本回放时超时情况经 ...

  10. X86平台下嵌入式linux触摸屏解决方案(usb触摸屏控制器+完美校准方案+触摸屏QTE开发环境搭建)

    一直在用X86平台,真心不想用WINCE和XPE,一些大的硬件供应商都不提供linux平台下的技术支持,比如研华的3343PC104系列的板子... 开发的问题如下: 1 USB控制器目前只有台湾和竹 ...