3

David Chisnall的“ Objective-C for Java Programmers,第 1 部分”介绍说

与总是按引用传递的对象不同,结构通常按值传递。

我对 Objective-C(来自 C++)非常陌生,所以我很难理解这一点。在 C++ 中,我可以通过指针或引用传递结构,但不能通过值传递(可能是因为它非常低效)。

Objective-C 是如何做到这一点的?它真的以类似堆栈的方式一个一个地推动所有结构成员吗?

如果结构由大型/复杂的对象组成,会发生什么?

4

2 回答 2

5

是的,它会复制整个结构,并将这个传递给调用函数,所做的任何修改都不会影响原始结构。而缺点当然是因为速度慢,而且还要消耗两倍的空间。

于 2012-09-28T17:32:00.547 回答
2

它将所有结构成员复制到堆栈中。请记住,结构中的复杂对象由指向它的指针存储,因此当您复制结构时,您拥有指向复杂类型的点的副本和副本。当然,指针的副本指向与原始对象相同的内存位置,因此您可以对原始对象执行操作。

当您拥有原始类型和原始复杂对象的副本时,这种方法会导致无法维护的混乱,即使您知道自己目前在做什么。

于 2012-09-28T17:36:00.437 回答