一般來說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