建了一个面试题解答的项目,大家可以看一看,希望大家帮忙给一个star,谢谢了!
项目地址:https://github.com/NotFound9/interviewGuide
在使用过程中发现,我们App的首页在快速滑动时会出现掉帧,以及在上拉加载更多时会抖动,因为首页模块是以前的同事写的,很多代码已不适应当前的需求,所以产生了优化的想法,优化主要分为以下几个方面:
1.缓存cell高度(发现了一种计算Label高度的新方法)
2.优化cellForRow方法
3.图片加载优化
4.禁止tableView预估高度
5.删除无用数据处理逻辑
缓存cell高度
在Feed流中,UITableViewCell的高度通常是变化的,需要根据返回的数据中的cell类型以及label的文字长度来计算高度,而在UITableView中func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
是一个高频调用的方法,为了减少CPU的计算,尽可能减少掉帧,所以需要将高度进行缓存,在我们的项目中,首页的数据是这样一个操作流程后台返回的JSON->FeedListModel->FeedsModel->各种cell的ViewModel(例如小图片的cell对应的model-SmallImageCellViewModel,大图片的cell对应的-BigImageCellViewModel)FeedListModel主要是包含了一些页码信息和FeedsModel数组FeedsModel储存着后台返回的cell所需的信息BigImageCellViewModel是cell对FeedsModel进行处理后得到cell所需的信息
优化以前,我们的高度是通过BigImageCellViewModel中计算属性height去获取的
var height: CGFloat {
guard let title = title else {
return ((UIScreen.mainWidth - 30) * 9)/16.0 + 62
}
let constraintRect = CGSize(width: UIScreen.mainWidth - 30, height: 38.5)
let attributes = [NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: