通过价值不会影响Setter?

时间:2013-03-07 17:45:49

标签: objective-c pass-by-value

看一下这样的二传手:

- (void)setCount:(NSNumber *)newCount {
    [newCount retain];
    [_count release];
    // Make the new assignment.
    _count = newCount;
}

如果我致电[self setCount:anNSNumber],效果将会发生(_count将被释放,anNSNumber将被保留,......如您所知)。但我知道在Obj-C中传递值是默认的。那么,为什么会发生这种情况?

2 个答案:

答案 0 :(得分:2)

参数按值传递。在这种情况下,参数是指针。指针而不是对象按值传递。

答案 1 :(得分:2)

你说Objective-C使用pass-by-value是正确的;它不仅仅是默认值,而是唯一支持的参数传递机制。 Objective-C ++也支持C ++传递引用。

在您的表达式[self setCount:anNSNumber]中,变量anNSNumber中的将传递给setCount。但是,该值是NSNumber *类型的引用,该引用可用于修改引用的对象。

为参数传递的值用于初始化被调用者中的局部变量,您可以修改该变量中的值而不会对调用者产生任何影响 - 这是按值调用的定义。例如,您可以添加到setCount

newCount = [NSNumber numberWithInteger:42];

这对调用者没有任何影响。