tableView 卡顿优化,除了缓存计算高度,还可以...

本文探讨了如何优化UITableView的性能,除了缓存计算高度,还介绍了通过多线程计算布局信息、手动布局代替Auto Layout、缓存高度和图片解码来提高FPS。关键改进包括在子线程进行计算和渲染分离,减少主线程负担,显著提升列表滚动流畅性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

列表界面的卡顿优化,除了缓存计算高度,

还可以开个线程,异步计算高度并缓存,

再回到主线程,刷新界面

还有图片解码消耗性能, …
  • 使用纯代码,取代 xib ( xib, 一般会被解析成代码 )

  • 减少 UI 显示层级, ( zIndex 方向上 )

  • 合并用来显示的控件, ( UI 控件,数量上 )

例如:

一个 Label 的富文本 = 多个 Lable 的纯文本

  • 避免离屏渲染

避免使用到,离屏渲染缓冲区

( 苹果已经,优化得很好了 )

本文重点介绍,多线程大法

对于复杂的列表显示,

一般都是,滚动的时候,更卡顿
  • A 修改前,

IMG_1844.PNG

A 特点 0,没有缓存高度

cell 的高度,触发直接计算

先渲染,再取高度

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    
    TimeLineCell *cell = [[TimeLineCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
    
    [cell configureTimeLineCell:timeLineModel];
    
    [cell setNeedsUpdateConstraints];
    [cell updateConstraintsIfNeeded];
    
    [cell setNeedsLayout];
    [cell layoutIfNeeded];
    
    CGFloat rowHeight = 0;
    
    for (UIView *bottomView in cell.contentView.subviews) {
        if (rowHeight < CGRectGetMaxY(bottomView.frame)) {
            rowHeight = CGRectGetMaxY(bottomView.frame);
        }
    }
    
    return rowHeight;

}
A 特点 1,cell 中控件渲染的同时,在计算

一个 cell, 下面的图片展示相关

五种布局:

没有图片

单张

二三张

4 张

5 张及以上

for (UIButton *btn in self.contentImageBtns) {
             [btn removeFromSuperview];
         }
         [self.contentImageBtns removeAllObjects];
         if (timeLineModel.contentImages.cou
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值