Objective-C是按值传递还是按引用传递?

时间:2014-03-06 01:44:03

标签: objective-c pass-by-reference pass-by-value

因为我们总是使用指针来定义变量,所以我想知道Objective-C是否是“按值传递”,因为像Java一样,实际值将通过使用它的引用来传递。

但是,由于它似乎是在C之上构建的,它是否具有C的所有功能?

2 个答案:

答案 0 :(得分:19)

C不支持传递引用和Objective-C,作为C的严格超集也不支持。

在C(和Objective-C)中,您可以通过传递指针来模拟传递引用,但重要的是要记住,您仍然在技术上传递一个值,这恰好是一个指针的值。

因此,在Objective-C(和C,就此而言)中,没有其他语言(例如C ++或Java)中的引用概念。

这可能令人困惑,所以让我试着更清楚(我将使用普通的C,但是 - 再次 - 它在Objective-C中不会改变)

void increment(int *x) {
   *x++;
}

int i = 42;
increment(&i); // <--- this is NOT pass-by-reference.
               //      we're passing the value of a pointer to i

另一方面,在C ++中我们可以做到

void increment(int &x) {
   x++;
}

int i = 41;
increment(i); // <--- this IS pass-by-reference
              //      doesn't compile in C (nor in Objective-C)

答案 1 :(得分:1)

它是C的严格超集。 它和C一样。 这是所有对象实际指向结构的一个原因。