David Chisnall 的“ Java程序员Objective-C,第1部分”简介
与始终通过引用传递的对象不同,结构是 通常按价值传递。
我是Objective-C(来自C ++)的新手,因此我无法理解这一点。在C ++中,我可以通过指针或引用传递结构,但绝不能通过值传递(可能因为效率非常低)。
Objective-C如何实现这一目标?它是否真的以堆叠的方式逐个推动所有结构成员?
如果结构由大型/复杂对象组成,会发生什么?
答案 0 :(得分:5)
是的,它会复制整个结构,并将其传递给调用函数,并且所做的任何修改都不会影响原始结构。缺点当然是因为它很慢,但也消耗了两倍的空间。
答案 1 :(得分:2)
它将所有结构成员复制到堆栈。请记住,结构中的复杂对象是通过指针存储的,因此在复制结构时,您可以将点的副本和副本复制到复杂类型。当然,指针的副本指向内存中与原始位置相同的位置,因此您可以对原始对象执行操作。
当您拥有原始类型和原始复杂对象的副本时,这种方法会导致无法维护的混乱,即使您知道自己目前正在做什么。