UITableView的性能优化,提升列表滚动的流畅性

本文总结了UITableView的性能优化策略,包括Cell重用、提前计算并缓存Cell高度、异步绘制、按需加载和减少渲染开销等,旨在提升列表滚动的流畅性。通过Cell重用机制、优化数据源方法、使用静态变量和缓存池,以及善用hidden属性隐藏subviews,可以有效减少性能消耗。此外,文章还强调了计算并缓存Cell高度的重要性,以及滑动时按需加载数据和异步处理图片的策略。

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

本篇博客目的是:总结UITableView性能优化方向,有些优化方式是我在开发中使用到过的,有些是没有用到过的,当中也有参考、查看很多大神的总结,这才有了本篇博客,仅供大家参考!


1. Cell重用

   1.1>数据源方法优化

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

   在可见的页面会重复绘制页面,每次刷新显示都会去创建新的Cell,非常耗费性能。
   解决方案:首先创建一个静态变量reuseID(代理方法返回Cell会调用很多次,防止重复创建,static保证只会被创建一次,提高性能),然后,从缓存池中取相应identifier的Cell并更新数据,如果没有,才开始alloc新的Cell,并用identifier标识Cell。每个Cell都会注册一个identifier(重用标识符)放入缓存池,当需要调用的时候就直接从缓存池里找对应的id,当不需要时就放入缓存池等待调用。(移出屏幕的Cell才会放入缓存池中,并不会被release)所以在数据源方法中做出如下优化:

// 调用次数太多,static 保证只创建一次reuseID,提高性能
static NSString *reuseID = “reuseCellID”;
// 缓存池中取已经创建的cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseID];

   1.2>缓存池的实现

   当Cell要alloc时,UITableView会在堆中开辟一段内存以供Cell缓存之用。Cell的重用通过identifier标识不同类型的Cell,由此可以推断出,缓存池外层可能是一个可变字典,通过key来取出内部的Cell,而缓存池为存储不同高度、不同类型(包含图片、Label等)的Cell,可以推断出缓存池的字典内部可能是一个可变数组,用来存放不同类型的Cell,缓存池中只会保存已经被移出屏幕的不同类型的Cell。

   1.3>缓存池获取可重用Cell两个方法的区别

-(nullable __kindof 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值