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
}

そして、View Controller のクラス宣言:

@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

保持カウントは役に立ちません。呼ばないで。

あなたの2つの質問に対する答えは、「実装の詳細」です。

保持とリリースのバランスがとれている限り、仕事は完了です。保持カウントが特定の絶対値である理由を説明するには、フレームワーク自体の実装にアクセスする必要があります。

于 2011-07-24T00:16:09.060 に答える
0

おっと、(3)で間違えました

[self.itemCell retainCount](3)では、保持カウントを表示するように呼び出していましたが、すでにself.itemCellに設定されてnilいるため、明らかに0しか得られませんでした。どうしてそれを逃したのかわからない...

(3)では、cell保持カウントは通常の1です(セルはによって返される配列によって保持されますloadNibNamed:owner:options:

于 2011-07-22T12:06:59.030 に答える