UITableViewCell的复用

2024-06-03 06:08
文章标签 uitableviewcell 复用

本文主要是介绍UITableViewCell的复用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

UITableView的动态模式在开发中是很重要的,能够通过对Cell的复用快速的开发一个UITableView.这里对UITableView的动态创建进行一些总结 :

这里写图片描述

创建一个TableViewController以后,观察TableView的属性,在Content中选择Dynamic Prototypes。在下面可以选择几种Prototype Cells

这里写图片描述

接下来选中一个Cell,在右边我们可以选择这种原型Cell的Style。接下来最关键的部分是Identifier,身份信息,这个有关于后面我们进行复用的时候需要的信息。

接下来是通过对TableView设置数据源

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{return 1;
}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{switch (section) {case 0:return 4;break;default:return 0;break;}}

这里建立了一个section,section里面有四行

下面是最关键的复用部分。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{static NSString *cellIdentifierForImage=@"UITableViewCellIdentifierKeyWithView";
//    static NSString *cellIdentifierForDetail=@"UITableViewCellIdentifierKeyWithDetail";UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifierForImage];switch (indexPath.row) {case 0:{cell.textLabel.text = @"头像";cell.accessoryView = self.avatar;return cell;}case 1:{cell.textLabel.text = @"用户名";cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;cell.detailTextLabel.text= self.nameLabel.text;[cell.detailTextLabel sizeToFit];return cell;}case 2:{cell.textLabel.text = @"修改密码";cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;return cell;}break;default:return cell;break;}return cell;
}

在下面的代码中

UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifierForImage];

我们服用了identifier为cellIdentifierForImage的类型的cell。那么在运行的时候,将会复用cellIdentifierForImage的cell创建三个。

对于cell的复用,sdk中提供了两种不同的方法

- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier;  
- // Used by the delegate to acquire an already allocated cell, in lieu of allocating a new one.
- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0); 
- // newer dequeue method guarantees a cell is returned and resized properly, assuming identifier is registered

上面是是官方文档中对两种方法的解释。

可以看到第二种注释的是在IOS6后可以使用。

那么区别在于什么呢?

一种解释是:

第一种是使用在ARC模式下的,不需要设置全局static,直接使用重用池。

第二种是使用在MRC模式下的,需要设置重用池。

在我实验过后发现

第一种方法在找不到identifier的时候会报错,因为该方法必须找到一个已经alloc的对象。第二种方法如果找不到的时候会返回一个默认的cell。总的来说第二种方法能避免出错。

这篇关于UITableViewCell的复用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1026186

相关文章

iOS UITableViewCell重用机制理解之初级剑侠篇(欢迎提建议和分享遇到的问题)

@dequeueResableCellWithIdentifier方法:这个单词翻译一下就是“出列的可重用的cell”        iphone重用机制是苹果为了实现大量数据显示而采用的一种节省内存的机制,比如在UITableView和ScrollView 等地方。为什么要“可重用”?对于我们的项目来说,内存控制是必不可少的,如果一个tableview有几百个cell,这个内存消耗是很大的

React逻辑复用的方式都有哪些

在日常开发中,能够优雅的复用组件和逻辑,是优秀开发者的职责。在react中,复用逻辑的方式有很多,可以适用于不同的业务场景。今天说三个比较有代表性的,Render Props、HOC、Hooks Render Props 创建一个接受函数作为其子组件的prop的组件,该函数返回一个React元素。通过这种方式,父组件可以通过传递不同的函数来重用相同的逻辑。 示例代码: functio

【Rust日报】 2021-04-27 Zellij,Rust编写的新终端复用工具

simdutf v0.1.1 - 小版本的更新,巨大的性能提升 simdutf是一个Rust编写的SIMD加速的UTF-8验证库。比起std,在non-ASCII快22倍,在ASCII上快了3倍。 GitHub: https://github.com/rusticstuff/simdutf8 :https://www.reddit.com/r/rust/comments/mz44xi/simdu

腾讯出品 AI绘画Stable Diffusion超强插件,工作流一键保存复用!

大家好,我是向阳 近期,听说老东家腾讯开源了一款超强的Stable Diffuison插件——LightFlow,它可以一键保存所有工作流数据,也就是你辛苦实验、创建好的出图提示词+采样器+相关度+插件参数+……都可以一键保存下来,下次直接快速导入,就可以开始工作,非常的强!快跟我去看看吧~ LightFlow简介 官方简介:一个基于SD的开源插件LightFlow,它可以帮助你一键保存所有

从复用性角度阐述中台建设

目录 复用性中台定义深思中台建设产品线形态何时演变中台能力落地中台 业务中台架构总结 技术学习永不止步,最近也是看了很多关于架构设计相关的专栏,慢慢总结出来一部分知识,代入自己的思考与理解,以及结合并反思自己之前公司的架构设计经验,发现很多方法论适用场景,也希望能够解决小伙伴们的一些疑惑以及感谢大佬们也给我指点迷津,站在巨人的肩膀上成长~ 复用性 首先谈一下复用性的理解: 复

使用io命令查引脚复用

下面以3368 UART3 流控为列子说明   1. 首先查看原理图,找到引脚定义   2. 打开该芯片的说明手册,查到GPIO3_C0  GPIO3_C1的 找到GRF章节,获取该GPIO组的IOMUX偏移地址,如下为 0x0028   3. 查看基地址 可以看到GRF起始基地址为0xFF770000 因此该GPIO3_C组的地址为0xFF770028 因此使

微信小程序学习(八):behaviors代码复用

小程序的 behaviors 方法是一种代码复用的方式,可以将一些通用的逻辑和方法提取出来,然后在多个组件中复用,从而减少代码冗余,提高代码的可维护性。 如果需要 behavior 复用代码,需要使用 Behavior() 方法,每个 behavior 可以包含一组属性、数据、生命周期函数和方法 组件引用它时,它的属性、数据和方法会被合并到组件中,生命周期函数也会在对应时机被调用。 1、注册

Python类的优势及应用场景深度分析(代码封装与组织、继承与代码复用、多态与接口、状态管理与行为封装)(python class)

文章目录 Python 类的优势及应用场景深度分析1. 代码封装与组织1.1 封装性示例代码:用户账户管理 1.2 组织性 2. 继承与代码复用2.1 继承性示例代码:员工管理系统 3. 多态与接口3.1 多态性示例代码:图形渲染 4. 状态管理与行为的封装4.1 状态的持久化:类可以持久化内部状态,而闭包或全局变量在这方面通常表现得不那么直观和安全。示例代码:游戏状态管理

【iOS】自定义cell及其复用机制

文章目录 cell的复用注册非注册两者的区别 自定义cell cell的复用 当用户滚动 UITableView 或 UICollectionView 时,只有少量可见的 cell 会被实际创建和显示。对于那些暂时不可见的 cell,系统会将它们缓存起来以备将来复用。这就是所谓的 cell 复用机制。 为什么需要cell的复用: 提高性能: 不需要为每个 cell 都创建