C ++中“const reference”的概念是否存在于Objective-C中

时间:2017-03-13 10:41:43

标签: c++ objective-c reference const

我关注引用,当我调用Objective-C中的方法时,我会避免使用对象的最大副本。

有人说Objective-C传递了对象的按值,那么在Objective-C中这个C ++仍然可行吗?或者是否存在变通方法?

目前,我看到的唯一解决方案是使用Objective-C ++。

1 个答案:

答案 0 :(得分:2)

在Objective-C中,所有对象都在堆上创建。因此引用了所有对象。因此,没有任何对象是静默的"复制,特别是在传递给方法或函数时不会:

void doSomething( NSMutableString* foo ) // A function taking a reference to an instance of NSMutableString
{
  [foo appendString:@"foobar"];
  foo = nil;
}

NSMutableString *foo = [@"bar" mutableCopy]; // foo is a reference to an instance of NSMutableString
doSomething( foo ); // A copy of the reference, nor the object neither a copy of the object is passed
// foo is unchanged, since it is copied through pass by value.
// the object, foo points to, is @"barfoobar", since the object is not copied

Objective-C将参数始终按值传递,但由于它始终是引用,因此复制引用(通常是机器字)而不触及引用对象的标识。

{{1}}

所以没有什么可以避免的。