前言
本文主要是讲对UITableView以及UICollectionView的一些使用场景和注意事项,如何利用UITableViewCell和UICollectionViewCell的重用去提升APP的交互体验。
一、问题来源
最近在对我们的应用进行一些性能上的优化,发现其中一个图片预览界面在添加的图片数量较多时十分卡顿,于是开始查找原因,发现实现方案存在问题——没有展示在界面的图片视图也会创建,没有想到重用,每次加载时都会创建新的一个视图。
二、具体场景及现有方案问题描述
1.场景
假设需要展示一些图片的缩略图,图片分为m组,每组有n张图片。
示意图1:
2.当前方案
整体使用UITableView进行展示,每一个UITableViewCell展示一组图片,每个UITableViewCell内部使用UIScrollView作为容器,将一组的图片进行展示。
其中UITableView使用了cell的重用,但是UIScrollView内每次使用时都会重新创建对应图片个数的item。
示意图2:
3.问题
这种实现在图片数量较多时,每次滚动列表时,都会频繁的创建对应数量的item,不仅耗费性能,而且没有显示的item创建还会占用大量的内存。
三、解决方案
这种场景下可以替换UIScrollView为UICollectionView,即每个UITableViewCell中添加一个UICollectionView来展示单个小组的图片,图片数量多时,没有展示的部分图片就会利用UICollectionView的重用机制被放回到重用池,需要展示时只需要取出并刷新UI就可以了。
这时图片增长不仅不会大量增加内存损耗,也不会因为频繁的创建而耗费内存了。
四、部分测试数据对比
修改前后使用xcode core animation工具在图片共4组,每组55张情况下的FPS数据:
注:上为修改后,下为修改前。处于交互(点击、轻扫等事件触发)状态下FPS值越接近60,界面卡顿越轻微。
上图为2017年最新的视频教程资料,搜索235再填上214最后输入9755加我好友私聊我上传视频教程,有什么不懂的也可以来私聊问我。
不定时更新中。
如果你能明白这些视频资料的好差,那么你也算是入行了,底层和中高层就是这一步之差。
网友评论