开发者社区> 人魔七七> 正文

IOS 非常流畅的滑动tableView

简介: 为什么要写这篇文章呢?之前写过一篇,因为手机打字不是很方便,还有之前同事用6splus 定下午茶时候,我滑动列表时候竟然误以为是安卓系统的手机。   tableview 流畅度可以用fps来测试,到60帧说明你优化tableView 已经很有经验了。
+关注继续查看
为什么要写这篇文章呢?之前写过一篇,因为手机打字不是很方便,还有之前同事用6splus 定下午茶时候,我滑动列表时候竟然误以为是安卓系统的手机。
 
tableview 流畅度可以用fps来测试,到60帧说明你优化tableView 已经很有经验了。
如下图怎么测试
620175FA CF05 4F80 B633 ACE063844C6A
接下来从哪方面入手来优化呢?
优化tableView主要有两个思路。缓存操作和异步操作。
 
问题一:
新人写tableView ,在下面方法中
BEA621A4 6D5D 4EA5 A814 73CF4D9AC3D7
频繁的创建cell 上的子控件并且添加到cell 上,这是一个要注意的地方,因为这样频繁的创建控件和添加会增加CPU的消耗,间接掉帧。
解决方法呢:在cell 里面如下方法
 
9ED7DFE5 06D2 4B45 8654 10EFEF5548BF
 
把所有的控件都创建好。通过隐藏来控制不同类型的cell显示。如下图示意:
D205EEFA 57DA 4839 BBBC 15EFF9121ADD
 
我再解释下。我先按照上图把控件都创建好了。如果没有评论就隐藏掉如上图是隐藏的效果。这样就不会把评论的高度计算到cell高度里。如果图片们没有,那么就不会把图片算里面,视频分享链接就从朋友圈内容开始计算布局。以此类推。
 
 
 
问题二:
tableView 高度问题。tableView 会频繁的调用如下方法
865EA65D 462C 4CE9 BDC2 B0341514B521
 
先确定它的contentSize及每个Cell的位置,然后再调用cellForRowAtIndexPath 来显示。
解决方案:在后台计算好高度以及布局,并缓存到内存重复使用。
后台计算cell 的高度然后放到集合里面下次继续使用。

问题三:有一些显示的内容有富文本,特别是从HTML 转化为属性字符串时候。
解决方案,后台提前转化需要的属性字符串,然后缓存起来避免重复转化带来的CPU性能消耗。可以参考DTCoreText从HTML转化属性字符串的思路,他就是GCD后台转化的。

问题四:图片圆角,阴影等操作,会引起离屏渲染。对CPU性能消耗。
解决方案:用一个图片盖上,或者后台就把图片绘制成圆角图片显示。

问题五:一些显示很多图片的地方,服务器的图片很大,不是你控件的大小。
解决方案:服务器返回控件宽高的图片,比如七牛可以在图片路径拼接参数来获取指定宽高。

问题六:视图层次复杂情况下,CPU把它们混合会很消耗资源
解决方案:如果不能避免,可以把你的视图绘制成一张图片来显示,当然渲染的过程在后台。可以参考VVeboTableViewDemo的思路。

还有一些其他的技巧,比如不用SB 和Xib 来创建cell 用纯代码来创建,抛弃自动布局用坐标来计算布局。虽然会牺牲很多时间

总之:把一些影响CPU的操作放到后台来操作,然后缓存一切可以缓存的东西。
 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用SSH远程登录阿里云ECS服务器
远程连接服务器以及配置环境
12631 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
9180 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
24846 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
32859 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
13836 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18085 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
13508 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
19831 0
+关注
人魔七七
人魔七七 关注移动端领域
191
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载