重用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数据库相关概念对象的理解,如有疏漏,欢迎指正.至于整理这篇文章的目的:主要是网上的内容太散了,这样整理一遍可以加深理解,也便于后续查阅.就我的理解:下述内容应该可 ...
随机推荐
- Spring学习笔记及资源
极客学院团队出品 Spring 教程 http://wiki.jikexueyuan.com/project/spring/ Spring 提供了以下两种不同类型的容器. 序号 容器 & 描 ...
- git branch merge到master
使用merge可以合并多个历史记录的流程. 如下图所示,bugfix分支是从master分支分叉出来的. 合并 bugfix分支到master分支时,如果master分支的状态没有被更改过,那么这个合 ...
- jq中prop和attr的区别以及各自的使用
在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别?这些问题就出现了. 关于它们两个的区别,网上的答案很多.这里谈谈我的心得,我的心得很简单: ...
- jQuery实现限制文本框的输入长度
jQuery限制文本框输入,包含粘贴. //限制文本框的输入长度 $(function () { $(document).on("keypress", ".txt-va ...
- yii2 刷新缓存(刷新模型缓存)
Yii2开启表结构缓存,因为当运用模型(model)时,AR的一些公共属性都会从DB中获取,这样会导致服务器负担一些额外的资源开销,实际上对于成品来说,服务器这些开始销是多余的,故应该阻止这种默认行为 ...
- cocos2d-x - android 学习(集成NDK、配置开发环境)
先来贴上一大神的博客:日月之明 --- http://www.cnblogs.com/lhming/tag/cocs2d-x/ 需要工具和软件包:Eclipse.Android SDK.Android ...
- 初探webpack之环境配置
先感叹一句,前端的发展真是太快了,ng和bb还没怎么学好就要过时了.现在感觉react当是未来的一个大方向. 以前一直用的grunt,不过前段时间作者已经停止更新了.正好webpack风头正盛,咱也不 ...
- Digit Division
Digit Division Time limit: 1 s Memory limit: 512 MiB We are given a sequence of n decimal digits. Th ...
- 用SQL语句生成唯一标识
以前都是在代码中生成GUID值,然后保存到数据库中去,今天发现用sql也能生成GUID值,觉得很新奇,所以记下来. sellect newid(); //得到的即为GUID值 此sql内置函数返回的 ...
- 对django模型中的objects的理解
object是模型属性,用于模型对象和数据库交互. object=Manager()是管理器类型的对象,是model和数据库进行查询的接口 可以自定义管理对象 books=models.Manager ...