对于dequeueReuseableCellWithIdentifier的个人见解

2023-10-13 13:58

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

Table Data Source Methods中的一个必要实现的方法tableView: cellForRowAtIndexPath: 中经常会包含一段代码:

[cpp]  view plain copy
  1. static NSString *FirstLevelCell = @"FirstLevelCell";  
  2.     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:  
  3.                              FirstLevelCell];  
  4.     if (cell == nil) {  
  5.         cell = [[UITableViewCell alloc]  
  6.                 initWithStyle:UITableViewCellStyleDefault  
  7.                 reuseIdentifier: FirstLevelCell];  
  8.     }  


第一行是设置了一个字符串标识。

第二行起是关键,翻看官方文档中关于方法dequeueReusableCellWithIdentifier:的说明:

For performance reasons, a table view'€™s data source should generally reuse UITableViewCell objects when it assigns cells to rows in its tableView:cellForRowAtIndexPath: method. A table view maintains a queue or list of UITableViewCell objects that the data source has marked for reuse. Call this method from your data source object when asked to provide a new cell for the table view. This method dequeues an existing cell if one is available or creates a new one using the class or nib file you previously registered. If no cell is available for reuse and you did not register a class or nib file, this method returns nil.

If you registered a class for the specified identifier and a new cell must be created, this method initializes the cell by calling its initWithStyle:reuseIdentifier: method. For nib-based cells, this method loads the cell object from the provided nib file. If an existing cell was available for reuse, this method calls the cell’s prepareForReuse method instead.

翻译一下 大意就是:

出于性能的原因,一个表视图的数据源应该采用可复用的表视图单元对象。一个表视图维护着一个可复用单元的队列或者列表。当要显示一个新的单元的时候就调用这个方法,这个方法会出列一个已经存在的单元。假如没有可以复用的单元那么就返回nil。

说实话不大清楚。还是从表视图的生命周期来说,一开始可复用队列为空,调用dequeueReusableCellWithIdentifier:肯定返回nil。然后就调用initWithStyle:reuseIdentifier:方法来产生并且标识复用记号的表视图单元。满屏显示的时候,滚动表视图,一侧的单元就会被移出屏幕,此时这个单元进入可复用单元队列,然后调用prepareForReuse方法准备一个即将出列的单元, dequeueReusableCellWithIdentifier:从可复用单元队列里出列一个可复用单元。

表视图里可能有不同类型的单元,复用是在相同类型单元里发生的。至于队列里有多少单元,这个系统自己控制,如果内存紧张,就会动态释放掉一些,当条件改善的时候,就会重新获取这些单元便于复用。一个极端的情况,可复用的单元没有了,那么又会调用initWithStyle:reuseIdentifier:来产生新的单元。理解表视图的机制,不能把思维定在严格的队列机制里,它有些动态的因素需要考虑。

此外在if语句下面的操作算是翻新,if语句里的操作应该是新造。


关键参考:

http://blog.csdn.net/tongzhitao/article/details/7843897

apple官方文档

这篇关于对于dequeueReuseableCellWithIdentifier的个人见解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

JVM 的个人见解

著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:吴青海 链接:http://www.zhihu.com/question/27339390/answer/36511809 来源:知乎 java堆(JavaHeap) 1.用来存放对象的,几乎所有对象都放在这里,被线程共享的,或者说是被栈共享的 2.堆又可以分为新生代和老年代,实际还有一个区域叫永久代,但

前缀和个人见解(二)

前缀和个人见解(二) 二维前缀和数组构造二维前缀和数组二维前缀和数组的用途题目 二维前缀和数组 除了有一维前缀和,也可以推广到 二维。 假设我有一个二维数组,这些红色的点都是数组上的点。 其中用蓝色方框 选中的点 的前缀和 就是 下面的区域的数字之和。 假如是下面的这个点 那么它的前缀和就是下面的区域的数字之和。 构造二维前缀和数组 接着我们来构造一个二维前缀

iOS关于锁的个人见解

2017-5-16 周三 晴  作者:快友技术部 iOS中thread有 1,NSObject的performSelector… 2,NSThread 3,Operation 4,GCD 5,pthread 其中,第2,4,5三种才算是真正的线程,因为第一个是一个selector,只是一个方法的实现而已,只是一个消息接受方法而已,不是

SRE职能描述以及个人见解

1.SRE 职能描述 SRE 到底是什么?这是一个最早由 Google 提出的概念,我的理解是,用软件解决运维问题。标准化,自动化,可扩展,高可用是主要的工作内容。这个岗位被提出的时候,想解决的问题是打破开发人员想要快速迭代,与运维人员想要保持稳定,拒绝频繁更新之间的矛盾。 SRE 目前对于招聘来说还是比较困难。一方面,这个岗位需要一定的经验,而应届生一般来说不会有运维复杂软件的经历;另一方面

socket编程的细节剖析(个人见解)

socket编程细节剖析 服务端: 1.创建套接字 要明白两点问题: 1.套接字是什么? 2.创建的这个套接字是用来干什么的? 第一个问题,一个完整的套接字本质上应该是一个包含通讯双方IP,端口等信息的类(源地址,源端口,目标地址,目标端口,协议),这个类创建出来的对象经过初始化以后(TCP的三次握手就是对套接字进行初始化的过程)就是对应的两台机器用来互相通讯的套接字对象,完整的套接字本质上可以理

Urban Elevations UVA - 221——个人见解

An elevation of a collection of buildings is an orthogonal projection of the buildings onto a vertical plane. An external elevation of a city would show the skyline and the faces of the “visible” bu

The Letter Carrier's Rounds UVA - 814 个人见解

先上题目。 For an electronic mail application you are to describe the SMTP-based communication that takes place between pairs of MTAs. The sender’s User Agent gives a formatted message to the sending Mes

80386内存寻址机制(个人见解)

看我的见解之前,不懂的请在看一遍原文pdf 无论如何GDTR都要先去寻找GDT,而且GDT只有一个。( LDT的描述符也就是 指向LDT的地址 在GDT里面) 1.当TI位为0时,用段选择器(索引值X)去找GDT里面的描述符x(段基地址)(然后前面原文pdf不是有xxxx:yyyyyyyy吗?有滴,那8位y+上段基地址就是对应的内存线性地址) 2.当TI位为1时,先用LDT(索引值n)去找

贪心算法个人见解

目录 基本思想: 贪心算法的步骤: 示例: 贪心算法(Greedy Algorithm)是一种基于贪心策略的算法范式,它在每一步选择中都采取当前状态下的最优选择,而不考虑全局最优解。贪心算法通常适用于那些问题,局部最优策略能够导致全局最优解的情况。 基本思想: 建立贪心选择性质: 通过某种规则确定每一步的选择,使每一步都是当前状态下的最优选择。 无后效性: 一个阶段的状态一

贪心算法个人见解

目录 基本思想: 贪心算法的步骤: 示例: 贪心算法(Greedy Algorithm)是一种基于贪心策略的算法范式,它在每一步选择中都采取当前状态下的最优选择,而不考虑全局最优解。贪心算法通常适用于那些问题,局部最优策略能够导致全局最优解的情况。 基本思想: 建立贪心选择性质: 通过某种规则确定每一步的选择,使每一步都是当前状态下的最优选择。 无后效性: 一个阶段的状态一