我正在完成斯坦福大学的讲座,计算器教程。 http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2011-fall
在其中他建议一个创建模型实例的好方法是在getter中使用以下方法分配/ init:
- (NSMutableArray *)operandStack
{
if(!_operandStack) {
_operandStack = [[NSMutableArray alloc] init];
}
return _operandStack;
}
但是,第一次使用[operandStack]
是:
[self.operandStack addObject:operandObject];
据我所知,正在使用setter。
我可以看到它显然有效(它运行) - 但我无法理解为什么如果没有人试图从operandStack
获得任何东西。有人可以赐教,我对任何搜索都没有运气。
答案 0 :(得分:0)
你的误解似乎源于[self.operandStack addObject:operandObject];
是一个“制定者”行动的想法。要将该表达式转换为英语:“将'addObject'消息发送到方法operandStack返回的NSMutableArray,并将operandObject对象传递给它。”
这似乎是一个点符号混乱。点符号简单地解析为基本函数调用。例如,上面的代码摘录可以使用熟悉的方括号表示法编写。像这样:
[[self operandStack] addObject:operandObject];
此表格仍然完全有效,甚至有些人更喜欢。在这种形式下,它可以让你更清楚地看到你实际上正在调用“getter”函数。