UITableView 不重用单元格?
Posted
技术标签:
【中文标题】UITableView 不重用单元格?【英文标题】:UITableView doesn't reuse cells? 【发布时间】:2009-09-24 15:06:52 【问题描述】:大家早上好。
我在 3.1 应用程序中遇到了与表格视图有关的小问题。我有一个表格视图,其中一些复杂的 tableViewCells 从笔尖加载,它们没有被重用。感觉这可能与从笔尖加载它们有关,我决定尝试一个简单的测试项目,看看是否只使用基本的苹果模板代码来重用单元格。我从基于导航的模板开始,这里是 cellForRowAtIndexPath 的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
// Configure the cell.
cell.textLabel.text = [NSString stringWithFormat:@"%d", indexPath.row];
return cell;
我在下一行设置了一个断点,每次通过都会调用它。
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]
在构造函数中设置reuseIdentifier:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell == nil)
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"] autorelease];
产生相同的结果,不重复使用单元格。
提前感谢您提供的任何帮助!
【问题讨论】:
【参考方案1】:表格通常会在需要开始重用之前创建和使用几个单元格(通常是 5 个左右)。这当然取决于它们有多大以及在任何给定时间出现在屏幕上的数量。没什么好担心的。
【讨论】:
所以它不像模板那样重用它?考虑到苹果谈论重用的程度,这似乎有点奇怪。 视情况而定。你有多少行?标准表一次可以容纳大约 8 行左右可见的行,因此它们需要是唯一的对象。但如果你说,20 行,你仍然只有 8 个左右的对象,它们会在滚动进出视图时被回收。【参考方案2】:我不确定您所说的每次、每次应用打开时是什么意思?
使用对象分配工具运行代码,并在滚动 tableview 时查看对象分配图表。如果即使经过几次滚动,对象分配也会线性增加。那你就有问题了。
【讨论】:
【参考方案3】:尝试将 CellIdentifier 设为静态,例如
static NSString *CellIdentifier = @"Cell";
【讨论】:
以上是关于UITableView 不重用单元格?的主要内容,如果未能解决你的问题,请参考以下文章