iPhone - 什么是重用标识符 (UITableViewCell)?

2023-12-24

来自官方文档:

重用标识符与表视图委托创建的 UITableViewCell 对象相关联,目的是重用它作为表视图多行的基础(出于性能原因)。它被分配给 initWithFrame:reuseIdentifier: 中的单元格对象,此后不能更改。 UITableView 对象维护当前可重用单元的队列(或列表),每个单元都有自己的重用标识符,并使它们可供 dequeueReusableCellWithIdentifier: 方法中的委托使用。

http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITableViewCell_Class/Reference/Reference.html#//apple_ref/occ/instp/UITableViewCell/reuseIdentifier http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITableViewCell_Class/Reference/Reference.html#//apple_ref/occ/instp/UITableViewCell/reuseIdentifier

我不明白这一点。好吧,我认为,我理解基本的想法,即创建 UITableViewCells,并尝试尽可能多地重用,而不是创建新的(或类似的东西)。但究竟是什么决定了细胞是否可重复使用呢?如果我有两个相同的(视觉上)单元格,但具有不同的文本(我想它们并不完全相同),它们是否可以具有相同的标识符?或者他们应该有不同的?或者在什么情况下应该使用不同的标识符?

任何人都可以澄清或链接到它所在的地方吗?


好吧,我相信这就是它的工作原理:

对 tableView 使用 dequeueReusableCellWithIdentifier 可以大大加快速度。您无需实例化大量单元,只需实例化所需数量的单元,即可见的单元(这是自动处理的)。如果滚动到列表中的某个区域,其中存在尚未获得视觉表示的“单元格”,则您可以重用现有的单元格,而不是实例化新的单元格。

您可以通过执行以下操作自己尝试:

static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil)
{
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    NSLog(@"new one");
}
else
{
    NSLog(@"old one");
}

请记住,您只希望 dequeueReusableCellWithIdentifier 返回适用的单元格。因此,如果要重复使用某个单元,请确保它适合具体情况。这就是reuseIdentifiers 的用途。通常,您只需要一个。但可能有一个列表使用几种不同类型的单元格,在这种情况下,您必须通过提供不同的reuseIdentifiers 来将它们分开。否则,您最终可能会得到一个被视为其他类型单元格的单元格(例如,UITableView 单元格而不是您想要的自定义单元格)。

所以基本上,据我了解,对不同类型的单元使用不同的reuseIdentifiers,其中kind表示类。如果您只使用标准单元,则可能只需要一个reuseIdentifier。

这种设计模式被称为对象池 http://en.wikipedia.org/wiki/Object_pool_pattern.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iPhone - 什么是重用标识符 (UITableViewCell)? 的相关文章

随机推荐