【问题标题】:When to 'return' in an Objective-C method何时在 Objective-C 方法中“返回”
【发布时间】:2015-01-23 19:49:04
【问题描述】:

只是一个简单的问题。我只是在徘徊,是否,我仍然要“返回”;即使在 void 函数中?

目前,即使在不返回变量/等的方法中...我仍然在方法末尾有“return”。

所以我还需要这个吗?因为我发誓没有它,它不会回到它被调用的地方。

EG:

-(void)viewDidLoad {
    [super viewDidLoad];

    // Run other setup code....

    // Run method 1.
    [self method_01];

    // Run next bit of code....
}

-(void)method_01 {

     // Run code....

     return;
}

我还需要像上面的例子那样做吗?

感谢您抽出宝贵时间,丹。

【问题讨论】:

  • 是什么让你觉得它不起作用?
  • 你可以随时从一个函数返回...只要确保它是正确的类型,一个 void 返回函数只会返回没有值。
  • @Wain 我认为我遇到的问题是异步网络请求。当我想要它时它不会返回。但现在我开始更多地了解它的工作原理以及它作为后台进程的意义,所以是的。
  • @Supertecnoboff 异步,嗯?一个异步方法将立即返回给调用者,甚至在它完成对其他线程/队列的实际工作之前很久。您需要传入一个完成块,异步方法将在完成时调用它(这将在方法已经返回之后)。
  • @bbum 是的,谢谢。这是问题的一部分,我没有使用完成块。谢谢大家现在修好了:)

标签: objective-c methods return


【解决方案1】:

如果 return 在方法的末尾,则没有任何区别。

-(void) doSomethingWithX:(int) X
{
     ..........................
     ........some Code.........
     ..........................

     return ;
 }

方法执行完成后,控件将到达调用者。标记退货也是如此。

但是在如下情况下,

-(void) doSomethingWithX:(int) X
{
     if(X>10)
     {
          return;
     }

     ..........................
     ........some Code.........
     ..........................
 }

如果您的 X 值大于 10,some code 将不会被执行。因此,默认情况下,控制权会在方法结束时返回给调用者。如果您想在方法执行之间强制返回给调用者,请使用 return。

【讨论】:

  • 谢谢,也有最好的例子。很有帮助。
【解决方案2】:

你没有。一旦到达当前作用域的末尾,该方法将返回到之前的执行点。

【讨论】:

    【解决方案3】:

    您不需要在使用 void 定义的方法中调用 return,因此不会返回值。

    有时您可能希望在此类方法中调用return,例如,如果满足特定条件,您想退出该方法而不执行剩余代码:

    if (iHaveDeterminedIAmFinished) {
        return;
    }
    
    ... // code that would otherwise execute.
    

    除此之外,通常在每个方法的末尾都包含return 是一种不好的做法。如果没有先前的return,每个Objective-C 方法都将无异常返回。因此,对于熟悉 Objective-C 的读者来说,这种做法不会更清楚。实际上,它可能会使其他阅读您的代码的开发人员感到困惑,他们会想知道其意图是什么。它可能看起来像是从方法的末尾省略了一些东西,因为否则没有理由包含这个返回。简而言之,我建议在方法末尾包含不必要的 return 调用是不好的做法。

    因为我发誓没有它,它不会返回到它被调用的地方。

    这里发生了其他事情。您可能需要弄清楚它是什么,但如果没有 return 调用会阻止返回执行点,这是不正确的。要么它正在返回,但由于某种原因你没有意识到它,或者你的代码中发生了其他事情。

    【讨论】:

      【解决方案4】:

      无论哪种方式都可以。它应该自动返回而无需显式返回。

      【讨论】:

      • 如果我继续添加显式返回,这是否被认为是一种不好的做法?因为对我来说,它让程序更清晰?
      • 每个 Objective-C 方法都无异常返回,如果它到达方法的末尾而没有先前的return。因此,对于熟悉 Objective-C 的读者来说,这并不是更清楚。实际上,这会使其他开发人员感到困惑,他们会想知道其意图是什么,因为不清楚该方法中是否省略了某些内容,因为没有理由将其包含在内。简而言之,在我的观点中包含这一点是不好的做法。
      • 我现在已将上述评论的核心添加到我的原始答案中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 2012-04-18
      • 2011-10-14
      • 2010-12-14
      相关资源
      最近更新 更多