2

从一个表中提取 UITableViewCell 原型并在另一个表中使用它们是否安全?

当我想在另一个 UITableView 中显示 UITableViewCell 时,我只是 dequeueReusableCellWithIdentifier 来自指定原型类型单元格的表中的可重用单元格。也就是说,不是它们将在其中显示的 UITableView。

它似乎工作正常,我没有注意到日志中有任何错误,但我担心它可能会导致奇怪的问题,因为我以前没有见过它。

我应该简单地为每个单元格使用单独的笔尖来实现吗?或者这种方法是好的、不好的做法还是危险的?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (self.prototypesTableView == tableView) {
        cell = [self.prototypesTableView dequeueReusableCellWithIdentifier:cellType];
    }
    else if (self.otherTableView == tableView) {
        cell = [self.otherTableView dequeueReusableCellWithIdentifier:cellType] ?: [self.prototypesTableView dequeueReusableCellWithIdentifier:cellType];
    }
}
4

2 回答 2

1

我很确定内存中的每个表视图都有自己的表视图单元队列。

当表视图(以及承载它的视图)消失时,与其关联的所有对象都将被释放(假设此处为 ARC)。有两个表的一个视图应该无关紧要:每个表都有自己的单元格集合来出列。

在我自己的代码中,我经常在UITableViewCell一张桌子到另一张桌子上重复使用相同的自定义“”。要注册一个自定义 UITableView 单元格(这将是 XIB 文件中的唯一对象),我这样做:

UINib * nib = [UINib nibWithNibName: @"SomeVeryCustomCell" bundle: nil];
if(nib)
{
    [myTableView registerNib: nib forCellReuseIdentifier:@"SomeVeryCustomCell"];
}
于 2013-04-15T01:58:42.140 回答
0

这段代码现在在生产中运行,我没有看到由于从一个表中出列可重用单元格并在另一个表中使用它们而造成的不良影响。为了确保正确重用,我总是从“otherTableView”中出列,如果没有可用的 UITableCell,则从“prototypesTableView”中出列。

尽管为了方便起见我这样实现它,但我建议以 Michael 建议的方式实现它是更好的做法,因为它提供了在视图控制器之间共享单元格的更大能力。

于 2013-10-16T11:13:39.217 回答