IOS:个人笔记|UI_UITableView的优化
1:在每行显示什么内容的方法里,即cellForRowAtIndexPath,每行都是重新创建了cell,数据量一多,极大的消耗了资源,当每次向上滑动,都是新建的cell,原来的cell被销毁。苹果已经做了部分优化,往下滚动,哪个cell出来了,才创建哪个cell。但是往上滚动,会重新创建新的cell,重复创建这个问题没有解决。这个可以打印下cell的内存地址来验证,我们看到没有cell的地址是相同的
优化思路:创建一个缓存池,用于存放cell对象。当上一个cell完全离开屏幕时,将其存入缓存池,同时刻下方出现的cell是新建的,因为缓存池没有可利用的cel。.如果再往下拉动,就会把上面之前缓存池的cell对象拿过来使用。以此达到循环利用的目的。
下面是cellForRowAtIndexPath里的方法
//定义一个重用表示
NSString *id=@"identifier";
//第一种:注册对应的cell类型
//[_tableview registerClass:[UITableViewCell class] forCellReuseIdentifier:id];
//去缓存中取是否可循环利用的cell,A是标示,看有没有这个标示的cell
UITableViewCell *cell= [_tableview dequeueReusableCellWithIdentifier:id];
//第二种:如果缓存池没有,需要自己创建
if(cell==nil)
{
cell=[[UITableViewCell alloc ]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"A"];
}
//设置数据
cell.textLabel.text=[NSString stringWithFormat:@"第%ld行",indexPath.row];
return cell;
注册cell类型,或者判断创建cell,两种方式用任何一种都可以。用注册的方式时,可以将该方法卸载viewdidload方法中(保证只注册一次),同时把标识声明为全局变量。上面的id表示也可以声明静态,这样不用每次cell出来时创建.
用注册的方式,设置不了自身的一些样式控件,注册一般多用于自定义cell时。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端