2015-12-30 25 views
3

在我的ARC iOS项目中使用goto时,出现了此编译器错误。(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 
+0

看起来像你在for(;;)语句中初始化了一个局部变量,然后你通过goto离开了这个范围:ARC不再能够释放变量。在obj-c中的 – Moonkid

+0

“goto”。我第二次看到它,首先是在一本书中。 – mkeremkeskin

+1

你可以发布一些更多的代码? – Fonix

回答

4

我终于想通了!其实,说警告清楚,“跳绕过保留变量初始化”因此,在接下来的一节

//在继续下一章节我宣布&初始化一些对象!

我的代码/问题是基本相同c99 goto past initialization

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

对于那些谁知道为什么我仍然需要跳转,我觉得这个解释是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

没有转到主线代码是窝深处(当然我们也可以引入一个辅助函数来处理它)。