【问题标题】:(iOS) Jump bypasses initialization of retaining variable when using goto(iOS) 使用 goto 时跳转绕过保留变量的初始化
【发布时间】:2026-01-08 15:15:02
【问题描述】:

在我的 ARC iOS 项目中使用 goto 时出现此编译器错误。

不能从这个 goto 语句跳转到它的标签。跳转绕过 保留变量的初始化

我知道 goto 通常很糟糕,但是...请告诉我如何解决它。代码如下,

//some process
NSArray *current = ... ;
if (current.count ==0) goto cleanup;
//proceed to next
if (processed failed) goto cleanup;
//further process

cleanup:
//clean up codes

【问题讨论】:

  • 看起来您在 for(;;) 语句中初始化了一个局部变量,然后您通过 goto: 离开了这些范围,并且 ARC 不再能够释放该变量。
  • "goto" 在 obj-c 中。我第二次看到它,第一次是在一本书里。
  • 你能再贴一些代码吗?
  • 解决了!看我的回答。

标签: ios xcode automatic-ref-counting goto


【解决方案1】:

我终于明白了!实际上警告说得很清楚,“跳转绕过初始化保留变量”所以在下一节中

//在继续下一节中,我声明并初始化了一些对象!

我的代码/问题和c99 goto past initialization基本一样

解决方案很简单,只是在其中添加了一个 {} 块,这里提到了Why can't variables be declared in a switch statement?

对于那些想知道为什么我仍然需要 goto 的人,我认为这解释了它 Is it ever advantageous to use 'goto' in a language that supports loops and functions? If so, why? ,尤其是“干净地退出函数”,请查看此处的示例 http://eli.thegreenplace.net/2009/04/27/using-goto-for-error-handling-in-c

没有goto的主线代码在嵌套条件的深处(当然我们也可以引入辅助函数来处理)。

【讨论】:

    最近更新 更多