重用UITableViewCell对象的概念
重用UITableViewCell对象
- UITableView控件十分常见,基本上我们随意打开一款App都能见到,它被用来列表展示数据,而其中的每一行内容都是一个cell对象
- 我们知道手机设备上的内存有限,如果某个列表包含很多行的内容,也就是说要创建很多个cell对象的话,内存资源很快就会被消耗殆尽
- 为了解决这个问题,系统提供了一个重用cell对象的途径 —— 对象池
- 当用户滚动UITableView对象时,部分cell对象会移出窗口。此时UITableView对象会将移出窗口的cell对象放入UITableView对象池,等待重新利用。当UITableView对象要求数据源返回某个cell对象时,数据源可以先查看对象池。如果有未使用的cell对象,就可以用新的数据配置这个cell对象,然后将其返回给UITableView对象,从而避免创建新对象。
- 从对象池获取cell对象时,由于无论取回的是哪个对象都要重新设置数据,所以无须关心具体是取得哪个特定对象。真正需要关心的是取回的对象是否是某个特定的类型(比如当我们在列表某些行上所展示的内容与其它行的结构不一样时,就需要创建其它类型的cell了)。因此系统提供了一个类型为NSString的reuseIdentifier属性,可以用作类型的身份标识。
- 相关实现代码
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//0.设置静态局部变量
static NSString *ID = @"car";
//1.取对象池中可循环利用的cell,系统具体取哪个cell是不确定的
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
//2.如果没有池中就自己创建
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
//调用次数测试
NSLog(@"%s",__func__);
}
//3.设置数据
cell.textLabel.text = [NSString stringWithFormat:@"第%zd行数据",indexPath.row];
//4.返回数据
return cell;
}
- 还可以通过在viewDidLoad方法中提前注册的方式:当数据源在对象池中取cell时会进行判断,如果之前已经注册过了相应标识的cell,它会自己创建相应cell,因此如果添加了提前注册的代码语句后就不需要if语句做判断手动创建cell了
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ID];
- 缺点是没法在创建时设置样式
initWithStyle,一般用于自定义cell
重用UITableViewCell对象的概念的更多相关文章
- OC中对象拷贝概念
OC中的对象拷贝概念,这个对于面向对象语言中都会有这种的问题,只是不同的语言有不同的解决方式:C++中有拷贝构造函数,Java中需要实现Cloneable接口,在clone方法中进行操作.但是不过OC ...
- java类(Class)的概念;对象的概念,声明类的属性 和方法,局部变量和成员变量,面向对象编程思维,抽象的概念
类(Class)的概念 类是对一组具有相同特征和行为的对象的抽象描述. 理解: [1] 类包含了两个要素:特性和行为 => 同一类事物具有相同的特征和行为. [2] 类是一个群体性概念.例如:网 ...
- C#核心基础--浅谈类和对象的概念
浅谈类和对象的概念 一.什么是类?什么是对象? 学习一门面向对象编程语言,我们必须得知道什么是类?什么是对象? 类(Class)实际上是对某种类型的对象定义变量和方法的原型.它表示对现实生活中一类具有 ...
- Java类和对象的概念
Java是一门面向对象的编程语言,理解Java,首先要理解类与对象这两个概念. Java中的类可以看做C语言中结构体的升级版.结构体是一种构造数据类型,可以包含不同的成员(变量),每个成员的数据类型可 ...
- python中面向对象_类_对象的概念与定义
1. 面向对象的概念,面向对象是一种编程思想. 是对现实世界中一类事物的抽象,在编程中可以理解为是一种建立现实世界事物的模型 2. 面向对象和面向过程的区别: 面向过程关注的是完成工作的步骤. 面向 ...
- 辨析:Object与Instance都是对象,概念上没有区别。
Object与Instance有重要的区别:Object是客观世界中存在的实体:Instance是将Object虚拟到计算机世界的实例,它的生存方式是可运行的代码,它的生存环境是计算机中的内存资源,生 ...
- 20190813 On Java8 第一章 对象的概念
第一章 对象的概念 抽象 Alan Kay 总结了对象的五大基本特征 万物皆对象. 程序是一组对象,通过消息传递来告知彼此该做什么. 每个对象都有自己的存储空间,可容纳其他对象. 每个对象都有一种类型 ...
- 人生苦短_我用Python_类与对象的概念_006
Python类与对象的概念类和对象--->万事万物都对象物以类聚.人以群分 --->?划分标准性别分 男女 中性成绩分 优秀 良好 不及格 类->根据类的属性来划分类的实例-> ...
- ORACLE各种对象、概念及关系整理(一文读懂)
下面是我整理(抄袭)的一些Oracle数据库相关概念对象的理解,如有疏漏,欢迎指正.至于整理这篇文章的目的:主要是网上的内容太散了,这样整理一遍可以加深理解,也便于后续查阅.就我的理解:下述内容应该可 ...
随机推荐
- 浅谈javascript的this指向
This的指向大致能够分为下面四类.我们分别举例说明 1. 作为对象的方法调用时.this指向该对象 var obj={ a:1, getA:function(){ co ...
- iOS类目
首先我们解释一下类目是什么 iOS中类目是为给已经存在的类加入新的方法.(可是不能加入实例变量) 也就是说 我们已经有一个类了 .可是我们发现这个类眼下所提供的方法,满足不了我们的需求,我们须要新的方 ...
- 使用Salt-ssh部署Salt-minion之yum安装(一)
一.RPM安装篇 使用salt-ssh功能要求客户端系统python版本2.6+ 1.salt-minion端环境: 系统:CentOS 6.5 64bit python版本:2.6.6 2.配置/e ...
- asp.net 2.0里也可以用JSON的使用方法
本人找到一份,可以在asp.net2.0里实现JSON方式传送数据的方法.但是原方法,不能在数据中带有{.}.[.]."等,所以我做特意做了转意. 全部代码如下. /// <summa ...
- ROC 准确率,召回率 F-measure理解(转载)
ROC曲线.AUC.Precision.Recall.F-measure理解及Python实现 原文连接:http://www.cnblogs.com/haoguoeveryone/p/haogu ...
- encodeURI() 函数概述
encodeURI() 函数的作用是将URI中的某些特定的字符以一位到四位的转义序列来替代,这些转义序列就是这些字符的UTF-8编码(如果说某些字符是由两个代替字符构成的,该字符也只会是四位的转义序列 ...
- python学习【第三篇】基本数据类型
Number(数字) int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取 ...
- 学生成绩管理系统【c】
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> #d ...
- echarts之series,markLine、markPoint
一.标记线和标志点 markLine 标记线 标记线的添加,如最大值.最小值.平均值的标记线 symbol 标记的图形. data->type 特殊的标注类型,用于标注最大值最小值等. 可选: ...
- a database of all existing files
mlocate.db(5): mlocate database - Linux man page https://linux.die.net/man/5/mlocate.db Name mlocat ...