一般来说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)
总的来说,我同意@try,@ catch,@ finally不仅仅是肯定的方式,但我确实有两个小问题.
(1)三个@try,@ catch,@ finally块必须全部在一起,你没有灵活性在@catch和@finally之间放置你可能想要绕过的代码.
(2)Apple的Obj-C 2.0文档声明如下:"重要:在Objective-C中,异常是资源密集型的.您不应该使用异常来进行一般的流量控制,或者只是表示错误(例如文件不是无障碍)".
很多人
加里
这是C代码中常见的习惯用法,在没有更全面的创建/破坏语义的语言的情况下,我认为它没有任何问题.
Goto在一般意义上被认为是有害的; 它可以使程序执行难以遵循.这里,它的范围非常有限,流量是单向的.从某种意义上讲,它也可以帮助您定位清理代码,这是一件好事.
| 归档时间: |
|
| 查看次数: |
509 次 |
| 最近记录: |