自定义TableView单元重用代码复审问题

时间:2014-11-02 23:46:11

标签: ios objective-c uitableview

我知道这个问题之前已经得到了回答,但我收到的代码审查有点困惑。我使用单元格的自定义xib构建自定义单元格调用OpeningsTableViewCell。在我的 cellForRowAtIndexPath方法我的代码如下:

static NSString *reuseIdentifier = @"OpeningsTableViewCell";
OpeningsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
if (cell == nil) {
    cell = (OpeningsTableViewCell *)[[[NSBundle mainBundle] loadNibNamed:reuseIdentifier owner:nil
                                                             options:nil] objectAtIndex:0];
}

我收到一位同事的代码审查,上面写着“这会导致每次都创建单元格”,但我总是以这种方式完成自定义单元格,而且我找不到任何不同的在线信息。想要看到什么错误,任何想法都在哄我的大脑?

2 个答案:

答案 0 :(得分:2)

如果您的NIB文件指定了不同的单元重用标识符,则会出现一种情况。然后,所有单元格都将具有该reuseID,因此dequeue将永远不会返回单元格。因此,您将永久加载NIB。但我看不出任何其他问题。

您可以注册NIB文件以与该reuseIdentifier一起使用(使用registerNib:forCellReuseIdentifier:),然后您将不需要if(cell == nil)。

答案 1 :(得分:0)

dequeueReusableCellWithIdentifier:forIndexPath:dequeueReusableCellWithIdentifier:的文档声明:

  

如果为指定的标识符注册了类,并且必须创建新的单元格,则此方法通过调用其initWithStyle:reuseIdentifier:方法来初始化单元格。对于基于nib的单元格,此方法从提供的nib文件加载单元格对象。如果现有单元可用于重用,则此方法将调用单元的prepareForReuse方法。

这是说如果您使用registerNib:forCellReuseIdentifier:registerClass:forCellReuseIdentifier:来注册重用标识符,您将永远不会有机会自己实例化。

来源: https://stackoverflow.com/a/22674466/1672895