你如何处理ARC的'require(...,bail)'陈述?

Jim*_*ers 8 objective-c llvm ios automatic-ref-counting

我正在查看Apple示例代码中Square Cam的一些示例代码.我想在使用ARC的现代项目中复制它的一些功能.但是,有大量的需求声明,例如:

BOOL success = (destination != NULL);
require(success, bail);
Run Code Online (Sandbox Code Playgroud)

这会生成编译器错误:

转到受保护的范围.

我的问题是 - 在使用ARC的项目中处理此类语句的适当方法是什么?

Lew*_*s42 10

我遇到了同样的问题(使用相同的示例代码).代码看起来像这样:

BOOL success = (destination != NULL);
require(success, bail);

//Initialise some variables

bail:
//Deal with errors
Run Code Online (Sandbox Code Playgroud)

我在声明块周围添加了大括号,以使其范围清晰:

BOOL success = (destination != NULL);
require(success, bail);
{
    // *** Initialise some variables ***
}
bail:
{
    //Deal with errors
}
Run Code Online (Sandbox Code Playgroud)

它解决了我的问题.通过观察这个我也了解到,有时可以扩展构建错误以获得更多细节.