问题标签 [reuseidentifier]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
32030 浏览

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

来自官方文档:

重用标识符与表视图的委托创建的 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

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

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

0 投票
8 回答
15819 浏览

ios - 如何清除缓存的 UITableViewCell

有人对如何清除缓存有建议UITableViewCell吗?

我想用reuseIdentifier缓存这些单元格。但是,有时我需要删除或修改某些表行。我希望reloadData在行更改后打电话。

现在,dequeueReusableCellWithIdentifier总是返回之前缓存的(过时的)条目。如何指示缓存已过时并且需要清除?

0 投票
3 回答
35007 浏览

iphone - UITableView dequeueReusableCellWithIdentifier 理论

当苹果UITableView为第一款 iPhone 开发时,他们在滚动浏览它时遇到了性能问题。然后一位聪明的工程师发现,造成这种情况的原因是对象的分配是有代价的,所以他想出了一种重用单元的方法。

“对象分配有性能成本,特别是如果分配必须在短时间内重复发生 - 例如,当用户滚动表格视图时。如果您重用单元格而不是分配新单元格,您将大大提高表格视图的性能。”

来源:iOS 参考库

要重用您使用的单元格:

现在,我想知道的是,这里实际发生了什么?如果有一个具有该标识符的单元格并仅返回该标识符,它是否会在 TableView 中查找?好吧,是的,但是如果它发送引用而不是分配,并且我有一个表格视图,假设具有相同标识符的 4 个单元格都可见。它如何在不分配的情况下将自己乘以四个实例?

我想知道这一点,因为我正在构建一个日历类型的组件,并且所有单元格都具有相同的结构,只有更改中的文本。因此,如果我能以某种方式重用我的单元而不是分配,我想我可能会获得更好的性能。

我自己的理论是它分配了四个单元格(仅仅是因为它也有)。当一个单元格从屏幕上消失时,它将被放入 TableView 重用队列中。当需要一个新单元格时,它会在队列中查找具有相同标识符的单元格是否可用,它会调用prepareForReuse该单元格上的方法并将自己从队列中删除。

0 投票
1 回答
118 浏览

cocoa-touch - 我可以重用 UITableViewCell 的确切情况是什么?

我可以重用单元格(dequeueReusableCellWithIdentifierUITableView类中使用)的确切情况是什么?

0 投票
1 回答
165 浏览

iphone - 从 Nib 加载时,自定义单元格永远不会排队?

我正在使用以下逻辑将自定义单元格加载到我的 UITableView 中:

但我注意到这样, dequeueReusableCellWithIdentifier:cust 将始终返回 nil 并且无法重用排队的单元格,因为它们从未排队。从 nib 加载单元不会告诉框架有关其标识符“cust”的任何信息。因此,从笔尖加载总是会发生,我相信会以某种方式让事情变慢。如果我错了,请纠正我。

我尝试在 viewDidLoad 函数中只运行一次 nib 加载,以便可以在上面使用它而不是每次都这样做,但由于某种原因,只有表格中的最后一个单元格构造正确。其他的都是白色的。

我希望有人对此有所了解。

干杯 AF

0 投票
2 回答
9714 浏览

ios - UITableView 和单元格重用

我有一个UITableView并且我已经子类化UITableViewCell(称为它CustomCell)所以它有几个标签和一个UIImageView.

只有某些单元格会实际显示图像。这是我的代码tableView:cellForRowAtIndexPath:

所以它只homeImageView在我设置的字典中找到相应图像时设置。这似乎适用于前几个单元格,但如果我滚动列表,我会发现单元格有图像,而它们不应该有图像。

我知道这可能是因为单元被重复使用,但我homeImageView在单元被创建/重用之后设置?!

这是我的 CustomCell 类的 init 方法

0 投票
1 回答
1586 浏览

objective-c - 目标-c:[self.tableview reloadData] 重新加载数据但不清除旧单元格

我正在研究一个tableview,我是动态创建单元格的新手(我曾经用IB创建它们,然后将它们链接到它们的tableviewcell控制器等......)。

一切正常,recepted 数组已正确更新,但是当我触发 [self.tableview reloadData] 时,程序只是在旧单元格上重绘新值。例如,如果单元格内的 uilabel 中有“TEST CELL”值,当我将数据更新为“CELL TEST”并触发 reloadData 时,uilabel 看起来就像有两个标签在彼此之上并且两个值都是可见的。(就像创建两个具有完全相同位置和相同大小的 uilabel 并设置它们的值)

每次我触发 reloadData 时都会发生此事件,每次重新加载时,程序看起来就像在旧的 uilabel 之上添加了另一个 uilabel。这是我的代码:

}

我在将组件添加到子视图后释放了这些组件,我正在考虑重用标识符是否有问题......

感谢您的帮助。

0 投票
3 回答
907 浏览

iphone - 滚动表视图导致崩溃

我面临着一个简单而烦人的内存释放问题和向已释放对象发送消息的问题。

我正在尝试从网页获取 Rss 提要。我在第一阶段分两个阶段开发了小程序,因为我对 iPhone 开发还不熟悉,所以我尝试从网页中获取 Rss 提要的文本部分,成功且没有问题。在第 2 阶段,我尝试获取图像的链接并在每个 UITableViewCell 和之后的详细视图上呈现它们。

我有一个加载 rss 的类,负责解析和返回我返回的可变数组[array copy]。一切正常,即使加载需要一些时间。当我运行应用程序并尝试滚动表格视图时,我遇到崩溃和 NSZombie 消息:

objc [37372]:FREED(id):消息保留发送到释放对象=0x3930cd0

当我尝试在不滚动的情况下加载 detailViewController 时也会发生这种情况,我发布了一些 tableViewController 以查看问题所在。

后冲突是一些 NSMutableStrings 和 UIImages,它们都在它们自己的 init 中分配和初始化,并在它们自己的 dealloc 方法中释放。当我尝试在不滚动的情况下点击单元格时,我也遇到了问题,但那是明天的问题。

0 投票
1 回答
958 浏览

uitableview - 如何为 UITableViewCell 的不同索引分配不同的重用标识符(在 XIB 中创建)

我已经使用 XIB 成功创建并链接了单元格,但查询是如何将不同的标识符(reuseIdentifier)分配给 UITableView 的不同单元格?假设我有一个注册表单的 tableView ...所以我希望第一个单元格具有标识符“nameCell”下一个“passwordCell”等等。

如果不使用 XIB,我可以通过使用索引识别单元格的用途来实现这一点,但只是想知道这是否可以做到。

问候, Dhanesh。

0 投票
3 回答
1087 浏览

ipad - 防止单元格在 AQGridView 中被重用

我将 AQGridView 用于图像网格。我需要在正在下载的特定图像上覆盖一个进度条。问题是,如果我将该图像单元格滚动到视野之外,进度条也会出现在另一个单元格上。我认为这是因为 cell 正在被重复使用。

有没有办法可以标记某些单元格不被重复使用?