【问题标题】:What does "return" statement mean in Objective-C? [closed]Objective-C 中的“return”语句是什么意思? [关闭]
【发布时间】:2012-02-18 06:07:01
【问题描述】:

Objective-C中return语句的含义是什么?

例如一个简单的加数计算器方法:

-(double) add: (double) value
{
    accumulator += value;
    return accumulator;
}

这是否意味着结果将被返回(或存储?)回累加器?如果在这种情况下没有返回语句怎么办?

另外,如何解释语句“return 0;”我们写在每个程序的末尾。

提前致谢。

【问题讨论】:

  • 我强烈推荐一本 [C] 教程/书,它应该涵盖所有标准语法结构和表达式,并解释语句和操作顺序等 :) 我对 K&R 书有美好的回忆。 Objective-C 只是一个扩展……return(和+=)只是“普通”C。

标签: objective-c return


【解决方案1】:

return 语句中给出的值是函数或方法返回的值。在您的示例中,accumulator 中的值将是调用方法-add: 的结果,如下所示:

double bar = [foo add:3.1];

bar 将获得 accumulator 中的值。

另外,如何解释语句“return 0;”我们写在每个程序的末尾。

在 Unix 中(请记住,MacOS X 和 iOS 都是 Unix 的变种),程序在退出时会返回一个值。值 0 表示正常终止;其他值表示某种错误或异常终止。

【讨论】:

  • 但是如果我在我的方法定义中不写return accumulator,“bar”不会仍然存储加法的值吗?
  • 不,不会,因为不会有结果。结果正是 return 语句中提供的值。此外,您的编译器会抱怨执行到达非 void 方法或函数的末尾。如果将方法声明为返回void,则不需要return 语句,因为void 表示没有结果。但是,您仍然可以在使用void 返回类型声明的方法或函数中不带任何参数使用return——例如,它通常用于提前返回。完整的描述请参见任何体面的 C 文本。
  • 您在原帖中的补充:既然我们写的是return 0,那我们不是强迫它正常终止吗?
  • 如果我们有-(void) add: (double) value,那么bar 会存储值吗?
  • 是的,如果执行到main()中的return语句,程序将退出,退出状态为0,即正常终止。那里没问题。如果您有理由指出其他退出状态(通常为 1 表示失败),则可以改为返回该状态。
【解决方案2】:

您的简单代码做了两件事。它改变累加器的值,然后将该值的副本返回到调用函数的位置。

如果函数调用如下:

float x = [self add:2.0];

x 将成为 return 语句所说的任何内容。

因为您正在更改实例变量,我怀疑您是否需要进行 return 调用,并且该函数可能返回 void 而不是 double:

-(void)add:(double)value;

但我想可能存在您想要更新实例变量并返回相同值的情况。

【讨论】:

    【解决方案3】:

    return 在几乎所有编程语言中都是非常标准的语句。

    它会将值“返回”给调用它的方法/函数。

    请阅读以下内容:

    http://en.wikipedia.org/wiki/Return_statement

    https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html

    【讨论】:

      【解决方案4】:

      不,它不会修改accumulator。它从消息中返回一个值(从accumulator 复制)。这意味着它为任何称为消息的代码提供值。

      【讨论】:

        【解决方案5】:

        如果调用此方法或程序的任何人或任何人不想要或使用调用的结果,则 return 语句除了在计算结果后退出被调用的方法或程序(如果还没有)之外什么都不做。

        如果函数、方法或程序的调用者确实想要结果(例如,用于赋值或在等式中使用),则 return 语句说明结果值是什么。

        程序实际上是操作系统调用的函数或方法,因此它可以向操作系统返回值。在终端中,键入 echo $status 以查看 shell 命令最后返回的结果。

        【讨论】:

          猜你喜欢
          • 2017-01-22
          • 2014-03-08
          • 1970-01-01
          • 1970-01-01
          • 2016-09-08
          • 2018-01-23
          • 2011-08-01
          • 1970-01-01
          相关资源
          最近更新 更多