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 回答