5

Objective-c 方法是否支持“按值传递”?或者更具体地说:

  1. 传递给方法的参数的默认行为是按引用传递吗?
  2. 如果是,在某些情况下是否有任何变化 - 例如,如果参数只是一个基本的 int 而不是一个对象?(或者这在objective-c中不相关)
  3. 无论如何,是否有一种方法支持基本变量(例如 int)的值传递?
  4. 反正有一个方法支持对象的值传递吗?(我在这里假设没有,但为了完整性会问。当然可以在消息中自己做副本,但是对于这种方法,我认为这不是 Objective-c 方法为您提供的东西,即它是自己动手)

谢谢

4

2 回答 2

8

Objective-C 不支持引用,至少在 C++ 术语的意义上不支持。

所有 Objective-C 对象都在堆上分配,因此所有“对象变量”实际上必须是指针类型。是否可以将指针视为有效地等效于引用是有争议的。例如,在谈论 C++ 时,存在明显的语义差异(否则,有什么意义......)

所以回答你的问题:

  1. 不,Objective-C 仅支持按值传递。如果将对象指针传递给方法,则按值传递指针-您没有传递引用。
  2. 在这方面,对象和原语之间没有内在的区别,除了对象总是由指针而不是值来引用的事实。如果你愿意,你可以传入一个原始类型指针。
  3. 是的。情况总是如此。同样,如果您传入一个指向原语的指针,则您是按值传递指针,而不是引用。
  4. 除了你传递的是指针而不是引用这一事实之外,你对这个标记非常满意。
于 2011-03-09T20:37:04.757 回答
5
  1. 不。默认情况下它是按值传递的,就像在 C 中一样。除了对于 Objective C 类实例引用的事实,该值一个引用。因此,Objective C 类实例通过引用有效地传递。

  2. 不适用

  3. 见 1。

  4. 并不真地。您可以序列化、传递字符串并在内部重新创建。或者,您可以让对象将其 ivars 存储为结构并按值传递该结构。一些对象支持克隆。

于 2011-03-09T20:28:09.277 回答