2

私は、ARC の前に多くの iOS 開発を行いました。ARC では、Apple が生成したコードがプロパティではなくインスタンス変数を使用していることに気付きました。何故ですか?

たとえば、マスター/ディテール ビュー コントローラー - DetailView では次のように表示されます。

- (void)setDetailItem:(id)newDetailItem
{
if (_detailItem != newDetailItem) {
    _detailItem = newDetailItem;

    // Update the view.
    [self configureView];
}
}

self.detailItem = newDetailItem; ではないのはなぜですか? iOS 開発を初めて学んだとき、プロパティの使用が推奨される方法でした。

4

2 に答える 2

8

無限再帰ループが作成されます。self.detailItem = obj; なので。呼び出し:

- (void)setDetailItem:(id)newDetailItem

「_」に関しては、変数を合成しない場合の名前の付け方です。必要に応じて変更できますが、そうする理由はありません。

于 2013-10-15T16:49:39.527 に答える
5

self.detailItem = newDetailItem;[self setDetailItem:newDetailItem];

そのため、スタックオーバーフローが発生します。

プロパティを宣言すると、インスタンス変数の getter と setter が既に定義されています (カテゴリ内にある場合を除く)。したがって、ゲッターまたはセッターのいずれかをカスタマイズする必要がある場合は、インスタンス変数に直接アクセスする必要があります。

于 2013-10-15T16:51:01.810 に答える