执行清理代码?

fuz*_*oat 3 objective-c

一般来说goto很糟糕(我们都知道为什么)在不必复制代码的情况下,对错误实现简单清理(如下例所示)的更好方法.在我看来,下面的代码很好,我只是好奇别人会做什么:

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]
    int returnCode = 0;

    // ... Other code

    // WRITE: To file
    if([dataStore writeToFile:savePathData atomically:YES] == NO) {
        NSLog(@"writeToFile ... Error");
        returnCode = 1;
        goto cleanUpCode;
    }

    // ... Other code

    // Clean up
    cleanUpCode:
    [archiver release];
    [newPlanet release];
    [pool drain];
    return(returnCode);
}
Run Code Online (Sandbox Code Playgroud)

EDIT_001:

总的来说,我同意@try,@ catch,@ finally不仅仅是肯定的方式,但我确实有两个小问题.

(1)三个@try,@ catch,@ finally块必须全部在一起,你没有灵活性在@catch和@finally之间放置你可能想要绕过的代码.

(2)Apple的Obj-C 2.0文档声明如下:"重要:在Objective-C中,异常是资源密集型的.您不应该使用异常来进行一般的流量控制,或者只是表示错误(例如文件不是无障碍)".

很多人

加里

Ter*_*fey 5

这是C代码中常见的习惯用法,在没有更全面的创建/破坏语义的语言的情况下,我认为它没有任何问题.

Goto在一般意义上被认为是有害的; 它可以使程序执行难以遵循.这里,它的范围非常有限,流量是单向的.从某种意义上讲,它也可以帮助您定位清理代码,这是一件好事.

  • 更糟糕的是,他正在使用objective-c,它有try/catch而不使用它. (3认同)