-5

看起来像这样的二传手:

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

如果我打电话[self setCount:anNSNumber],效果会发生(_count将被释放,anNSNumber将被保留,......如你所知)。但我知道在 Obj-C 中按值传递是默认值。那么,为什么会这样呢?

4

2 回答 2

2

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

于 2013-03-07T18:19:23.737 回答
2

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

在您的表达式中,变量中的值[self setCount:anNSNumber]传递anNSNumbersetCount. 但是,该值是type的引用NSNumber *,并且该引用可用于修改被引用的对象。

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

newCount = [NSNumber numberWithInteger:42];

这对调用者没有影响。

于 2013-03-07T18:23:55.827 回答