使用loadNibNamed加载UITableViewCell时保留计数

时间:2011-07-22 11:18:03

标签: iphone objective-c ios uitableview nsbundle

我使用Apple记录的loadNibNamed:owner:options:从nib文件加载自定义UITableViewCell:

ItemCell *cell = (ItemCell *)[tableView dequeueReusableCellWithIdentifier:cellId];
if (cell == nil) {
    // (1)
    [[NSBundle mainBundle] loadNibNamed:@"ItemCell" owner:self options:nil];
    // (2)
    cell = self.itemCell;
    self.itemCell = nil;
    // (3)
    // code continues here
}

视图控制器的类声明:

@interface MyViewController : UIViewController<UITableViewDelegate, UITableViewDataSource> {
@private
    UITableView *tableView;
    ItemCell *itemCell;
}

@property (nonatomic, retain) IBOutlet ItemCell *itemCell;

MyViewController是ItemCell的文件所有者。

我正在观察以下内容:

  • (1)self.itemCell保留计数为0
  • (2)self.itemCell保留计数为2
  • (3)self.itemCell保留计数为0
  • (3)cell保留计数为1

有人可以解释一下:

  • 为什么self.itemCell保留计数在(2)和(3)之间从2变为0?
  • 为什么(3)中cell的保留计数等于1?

2 个答案:

答案 0 :(得分:3)

retainCount没用。不要打电话。

关于你的两个问题的答案,“实施细节”。

只要您平衡保留和释放,您的工作就完成了。解释为什么保留计数是任何给定的绝对值将需要访问框架本身的实现。

答案 1 :(得分:0)

Ooops,犯了一个错误,在(3)

在(3)中,我正在调用[self.itemCell retainCount]来查看保留计数,但由于self.itemCell已经设置为nil,所以我得到的只是0!不知道我是怎么错过的......

在(3)中,cell保留计数为1,这是正常的(单元格由loadNibNamed:owner:options:返回的数组保留)