现在市场上的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. CentOS yum安装和配置MySQL(转载)

    From:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html] 一.MySQL简介 说到数据库,我们大多想到 ...

  2. phpStudy Linux安装集成环境 (CentOS--7)

    phpStudy for Linux (lnmp+lamp一键安装包) phpStudy for Linux 支持Apache/Nginx/Tengine/Lighttpd, 支持php5.2/5.3 ...

  3. Dapper.NET使用(转)

    Dapper.NET使用 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Dapper(4.0)为例. 2.1 在数据库中建立几张表. 2.2实体类. 3.使用方法 3.1  一 ...

  4. [Flex] Accordion系列-动态添加或删除Accordion容器中项目

    <?xml version="1.0" encoding="utf-8"?> <!--Flex中如何使用addChild()和removeCh ...

  5. TOP/ORDER BY 顺序(转)

    问题重现: --建表语句,测试数据 ),CreateTime datetime) go ) begin insert into TestTable )),DATEADD(day,@Count,GETD ...

  6. python 迭代器、生成器、装饰器

    一,迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束.迭代器只能往前不会后退. 特点: 访问者不需要关心迭代器内部的结构,仅需通过next()方 ...

  7. 巧用Freemarker的自定义方法

    要想使用Freemarker支持的自定义方法,需要实现freemarker.template.TemplateMethodModel接口,然后将方法对象放入到Freemarker的数据模型中,这样在f ...

  8. (medium)LeetCode 240.Search a 2D Matrix II

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...

  9. IO/NIO

    1.转换流,Buffered BufferedWriter out=new BufferedWriter(new OutputStreamWriter(System.out)); BufferedRe ...

  10. Spring-MongoDB简单操作

    1.简单的配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http: ...