结构如何通过价值传递?

时间:2012-09-28 17:28:44

标签: objective-c parameter-passing structure

David Chisnall 的“ Java程序员Objective-C,第1部分”简介

  

与始终通过引用传递的对象不同,结构是   通常按价值传递。

我是Objective-C(来自C ++)的新手,因此我无法理解这一点。在C ++中,我可以通过指针或引用传递结构,但绝不能通过值传递(可能因为效率非常低)。

Objective-C如何实现这一目标?它是否真的以堆叠的方式逐个推动所有结构成员?

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

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

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