iphone - objective-c 方法支持 "pass by value"吗?

标签 iphone objective-c ios pass-by-reference pass-by-value

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

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

谢谢

最佳答案

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

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

所以回答你的问题:

  1. 不,Objective-C 只支持按值传递。如果将对象指针传递给方法,则按值传递指针 - 您没有传递引用。
  2. 在这方面,对象和基元之间没有内在区别,除了对象总是由指针而不是值引用这一事实。如果愿意,您可以传入原始类型指针。
  3. 是的。情况总是如此。同样,如果您传入指向原语的指针,则您是按值而不是引用传递指针。
  4. 除了您传递的是指针,而不是引用之外,您在这方面的表现非常出色。

关于iphone - objective-c 方法支持 "pass by value"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5251687/

相关文章:

iphone - [iOS]如何获取日历事件,将一个重复事件作为一个事件?

iphone - 解除分配后的 CATextLayer 内存残留

ios - 如何创建应用程序范围的屏幕大小常量

ios - YTPlayerView缩略图自定义大小

ios - 从 NSDictionary 中提取文件

iphone - 输入有效值后如何启用 UIButton

iphone - 在 scrollViewWillBeginDragging 中检测 UIScrollView 滚动的方向

iphone - 如何将另一个类文件中的 IBOutlet 使用到不同的 .m 文件中?

javascript - 用于切换屏幕的钛标题栏按钮

ios - DeepEnd(cydia 调整)类似于 iOS 的 3D 背景