objective-c方法是否支持"按值传递"?

Gre*_*reg 5 iphone objective-c pass-by-reference pass-by-value ios

objective-c方法是否支持"按值传递"?或者更具体一点:

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

谢谢

Mac*_*Mac 8

Objective-C不支持引用,至少不支持C++的术语.

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

那么回答你的问题:

  1. 不,Objective-C仅支持按值传递.如果将对象指针传递给方法,则按值传递指针 - 您没有传递引用.
  2. 在这方面,对象和基元之间没有固有的区别,除了对象总是由指针引用,而不是由值引用.如果愿意,可以传入基本类型指针.
  3. 是.情况总是如此.同样,如果传入指向基元的指针,则按值传递指针,而不是引用.
  4. 除了你传递指针而不是引用这一事实之外,你对这个问题几乎感到震惊.


Sev*_*yev 5

  1. 不是.它默认是按值传递,就像在C中一样.除了Objective C类实例引用的事实,该值一个引用.所以Objective C类实例通过引用有效传递.

  2. N/A

  3. 见1.

  4. 并不是的.您可以序列化,传递字符串,然后在里面重新创建.或者您可以让对象将其ivars存储为结构并按值传递该结构.有些对象支持克隆.