【问题标题】:Pass by value don't affect Setter? [closed]传值不影响Setter? [关闭]
【发布时间】:2013-02-23 01:27:30
【问题描述】:
看起来像这样的二传手:
- (void)setCount:(NSNumber *)newCount {
[newCount retain];
[_count release];
// Make the new assignment.
_count = newCount;
}
如果我调用[self setCount:anNSNumber],效果就会发生(_count 将被释放,anNSNumber 将被保留,...如您所知)。但我知道在 Obj-C 中按值传递是默认值。那么,为什么会这样呢?
【问题讨论】:
标签:
objective-c
pass-by-value
【解决方案1】:
参数是按值传递的。在这种情况下,参数是一个指针。指针,而不是对象,是按值传递的。
【解决方案2】:
你说 Objective-C 使用传递值是正确的;它不仅是默认的,而且是唯一支持的参数传递机制。 Objective-C++ 也支持 C++ 引用传递。
在您的表达式[self setCount:anNSNumber] 中,变量anNSNumber 中的值 被传递给setCount。然而,该值是NSNumber * 类型的引用,并且该引用可用于修改被引用的对象。
为参数传递的值用于初始化被调用者中的局部变量,您可以修改该变量中的值而不会对调用者产生任何影响 - 这是按值调用的定义。因此,例如,您可以添加到您的 setCount:
newCount = [NSNumber numberWithInteger:42];
这对调用者没有影响。