0

私はスタンフォード大学の講義、電卓のチュートリアルに取り組んでいます。http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2011-fall

その中で彼は、モデルのインスタンスを作成するための優れた手法は、getter で次のように割り当て/初期化することであると示唆しています。

- (NSMutableArray *)operandStack
{
    if(!_operandStack) {
        _operandStack = [[NSMutableArray alloc] init];
    }
    return _operandStack;
}

ただし、最初[operandStack]に使用されるのは次のとおりです。

 [self.operandStack addObject:operandObject];

セッターを使用していることは理解しています。

私はそれが明らかに機能していることを確認できます(実行されます)-しかし、誰もoperandStackまだ何かを取得しようとしなかった場合、その理由を理解できません。誰かが私を啓発してくれませんか、私は検索で運がありませんでした。

4

1 に答える 1

0

[self.operandStack addObject:operandObject];あなたの誤解は、「セッター」操作であるという考えから生じているようです。その式を英語に翻訳するには:「'addObject'メッセージをoperandStackメソッドによって返されるNSMutableArrayに送信し、operandObjectオブジェクトを渡します。」

これはドット表記の混乱のようです。ドット表記は、基本的な関数呼び出しに単純に解決されます。したがって、たとえば、上記のコードの抜粋は、おなじみの角括弧表記を使用して記述できます。そのようです:

[[self operandStack] addObject:operandObject];

この形式はまだ完全に有効であり、一部の人にも好まれています。この形式では、実際に「getter」関数を呼び出していることがわかりやすくなります。

于 2012-07-10T00:42:09.470 に答える