如何知道当前UITableView有多少可重用的单元?

时间:2016-11-26 06:08:21

标签: ios objective-c uitableview

我一直在使用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:部分。

这就是为什么我想知道是否有办法计算内存中可出列单元格的数量。

0 个答案:

没有答案