我关注引用,当我调用Objective-C中的方法时,我会避免使用对象的最大副本。
有人说Objective-C传递了对象的按值,那么在Objective-C中这个C ++仍然可行吗?或者是否存在变通方法?
目前,我看到的唯一解决方案是使用Objective-C ++。
答案 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}}
所以没有什么可以避免的。