因为我们总是使用指针来定义变量,所以我想知道Objective-C是否是“按值传递”,因为像Java一样,实际值将通过使用它的引用来传递。
但是,由于它似乎是在C之上构建的,它是否具有C的所有功能?
答案 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一样。 这是所有对象实际指向结构的一个原因。