【问题标题】:Why does NSLog() not do anything if it's after a method's return?为什么 NSLog() 在方法返回之后什么都不做?
【发布时间】:2023-03-14 06:05:01
【问题描述】:

我注意到当我的方法运行时,控制台没有打印任何内容:

- (BOOL)theTemporyFunction
{
    return YES;
    NSLog(@"Events");
}

但是当我改变语句的顺序时:

- (BOOL)theTemporyFunction
{
    NSLog(@"Events");
    return YES;
}

NSLog() 确实运行了。

两个版本都可以编译,那么为什么NSLog() 在第一个版本中似乎不起作用?

【问题讨论】:

  • 返回后无语言执行代码!
  • 你没有收到来自 xcode 的警告吗?
  • return 就是这样做的,它返回一个值。 return 之后的任何内容都不会运行。由于这是编程中非常基本的想法,我认为如果您在发布问题之前阅读一本有关编程的介绍性书籍,那么您将来会收到更少的反对票。我推荐 Chris Pine 的 Learn to Program。它还可以作为 Ruby 编程语言的非常好的入门读物。
  • @Vignesh - ahm...Java 终于阻塞了... ahm... ;) 但总的来说,你是对的。
  • @BinyaminSharet。那是一个异国情调的街区。我同意。谢谢!。

标签: objective-c return


【解决方案1】:

return 是函数中执行的最后一条语句。在return statement 之后,函数返回控制权给调用者。

例如:

function1                                      function2
int x;
function2();-----------------------------+
                                         +---->puts("function2 - should be called");
                                         +-----return;
puts("back to function1");<--------------+     puts("should not be called");

【讨论】:

  • 编译器甚至会删除 return 语句之后的任何代码,因为它在任何时候都无法到达。
  • 是的,return语句之后的代码没有被执行(例如死代码)
【解决方案2】:

您确实需要学习编程基础知识。return - 正如它所说 - 您正在从方法执行返回到先前的上下文 >> 您此时将离开该方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多