我知道这个问题之前已经得到了回答,但我收到的代码审查有点困惑。我使用单元格的自定义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];
}
我收到一位同事的代码审查,上面写着“这会导致每次都创建单元格”,但我总是以这种方式完成自定义单元格,而且我找不到任何不同的在线信息。想要看到什么错误,任何想法都在哄我的大脑?
答案 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:
来注册重用标识符,您将永远不会有机会自己实例化。