因为我们总是使用指针来定义变量,所以我想知道Objective-C是否是"按值传递",因为像Java一样,实际值将通过使用它的引用来传递.
但是,由于它似乎是在C之上构建的,它是否具有C的所有功能?
C不支持pass-by-reference和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)