0

我正在使用AppleloadNibNamed: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?
  • 为什么cell(3)中的保留计数等于1?
4

2 回答 2

3

保留计数是无用的。不要叫它。

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

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

于 2011-07-24T00:16:09.060 回答
0

哎呀,在(3)中犯了一个错误

在(3)中,我打电话[self.itemCell retainCount]来查看保留计数,但由于self.itemCell设置为nilalready ,我得到的显然是 0 !不知道我是怎么错过的...

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

于 2011-07-22T12:06:59.030 回答