我一直在使用UITableView' dequeueReusableCellWithIdentifier
而没有多想,而且它工作正常。
但是对于我的新项目,我需要维护多个可重用的单元格。偶然我最终为每一行创建了一个可重复使用的单元格,令人惊讶的是它到目前为止工作正常并没有问题,大约有20行。
基本上没有"重复使用"继续,因为它为每个不同的单元格创建了一个可重用的单元格,这意味着它将所有单元格保留在内存中。我试图解决这个问题,但首先要确保当我修复它时,我可以看到具体数字作为证据。
所以我想知道是否有API或任何其他方式来查明有多少" deque-able"当前UITableView在内存中保存的可重用单元格。谢谢!
编辑:
也许这种描述令人困惑。让我澄清一下。我们说我有这段代码:
for(int i = 0 ; i < 1000 ; i++){
NSString *cellIdentifier = [NSString stringWithFormat:@"%d", i];
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier;
}
}
此代码有效地创建了1000个不同的可重用UITableViewCell。
我知道这很糟糕,但这不是这个问题的重点。
相反,我正在寻找的是:找出内存中有多少这些UITableViewCells(可能由tableView
对象保存)。
编辑#2:
我认为我的代码带来了更多的困惑。让我尝试用更详细的代码解决这个问题。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
NSString *cellIdentifier = [self.item objectAtIndex: indexPath.row];
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier;
}
...
}
在上面的代码中,我们说self.item
是一个包含1000个不同字符串的数组。在这种情况下,当您开始滚动时,它会查找reusable cell
,其中每个字符串都是其标识符。
第一次显示在屏幕上时,它无法找到它,因此initWithStyle:reuseIdentifier:
将创建它们。
滚动浏览全部1000时,由于每次都没有带cellIdentifier的单元格,cell
变量将始终为nil 。这就是为什么它将继续创建多达1000个UITableViewCells以及#34; dequeued&#34;。
一旦到达1000个项目的末尾,然后开始向上滚动,tableview将再次开始使用每个标识符查找UITableViewCell实例。这一次它们都存在于内存中,因此cell
永远不会是零。
我并没有把它从我的想象中拉出来。我发现错误地让自己陷入这种境地。当然,一旦我到达列表末尾并开始向上滚动,它就永远不会到达initWithStyle:
部分。
这就是为什么我想知道是否有办法计算内存中可出列单元格的数量。