【问题标题】: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];
    

    这对调用者没有影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 2018-11-28
      • 1970-01-01
      • 1970-01-01
      • 2017-12-18
      • 2011-09-29
      • 1970-01-01
      相关资源
      最近更新 更多