在GitHub在看了WeChat ,只提取了朋友圈的代码写了一个Demo。代码很简单。
如果想深入了解,可以参考iOS 保持界面流畅的技巧这篇文章写得很非常好。
优化就注意几点
1.TableView性能影响最大的是每个cell高度的获heightForRowAtIndexPath,这个函数会调用很多次,对于不是固定高度的cell,每次都需要去计算。像朋友圈这种,内容框的高度是需要通过计算文字得到高度的,这种大量的操作是很损耗性能的。所以,在请求完数据之后就计算好每个cell的高度,并且缓存起来,下次直接从缓存拿过来用。
2.使用一些高性能的组件比YY系列YYAnimatedImageView,YYLabel
3.可以把消耗性能的操作放到子线程中执行,不要阻塞主线程。
UIKit的工作基本上都是在主线程上进行,界面绘制,用户输入响应等等。所以当所有的代码逻辑都放在主线程时,某些耗时任务可能会卡住主线程造成程序无法响应,流畅度降低等问题;所以网络请求,cell高度计算,布局计算可以放在子线程执行。
4.尽可能的降低Storyboard,Xib的使用
在网上的一些资料了解到,xib或者storyboard本身就是一个xml文件,添加删除控件必然中间多了一个encode/decode过程,增加了cpu的计算量。Xib文件是在主线程中进行加载布局,所以Cell最好使用纯代码布局。如果cell高度是固定这种情况可以少量使用Xib。
5.滑动过程中尽量减少重新布局
自动布局就是给控件添加约束,约束最终还是转换成frame。所以在满足业务需求情况下,如果view布局层次较为复杂,尽量减少自动布局约束,转为手动计算布局,大量的约束重叠也会增加cpu的计算量
6.调试的时候可以借助监测TPS的工具 一般滚动的时候TPS<=60滚动都很流畅。(这个监测工具Demo里面有),也可以通过Xcode自带的调试工具Instruments来看看界面的流畅度。
7.其实做到上面几点基本就解决问题。至于什么按需加载看情况需不需要优化。
Simulator Screen Shot - iPhone 12 Pro Max - 2021-05-17 at 17.30.05.png
网友评论