(iOS) 使用 goto 时跳转绕过保留变量的初始化

Qiu*_*ang 4 xcode goto ios automatic-ref-counting

在我的 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
Run Code Online (Sandbox Code Playgroud)

Qiu*_*ang 5

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

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

我的代码/问题与c99 goto Past初始化基本相同

解决方案很简单,只需在其中添加一个 {} 块即可,如这里提到的Why can't Variables be statements in a switch statements?

对于那些想知道为什么我仍然需要 goto 的人,我认为这解释了在支持循环和函数的语言中使用“goto”是否有利?如果是这样,为什么? ,尤其是“干净地退出函数”,请查看此处的示例 http://eli.thegreenplace.net/2009/04/27/using-goto-for-error-handling-in-c

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