一般来说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);
}
EDIT_001:
一般来讲我同意@try,@catch,@finally比肯定更要走的路,但我确实有两个小问题。 (1)三个@try,@ catch,@finally块必须全部在一起,你没有在@catch和@finally之间放置代码的灵活性,你可能想绕过它。 (2)Obj-C 2.0的Apple文档声明如下:“重要:异常在Objective-C中是资源密集型的,不应该将异常用于一般的流控制,或者仅仅为了表示错误(例如一个文件不可访问)“。
多appcreciated
加里
您可以将所有产生错误的代码包装到try-block中,并将所有清理代码放入catch-block中。 – 2010-01-10 20:31:04
我经常使用这种格式。我认为它是goto的少数合法用途之一。 – 2010-01-10 22:31:17