Вообще говоря, 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) Документация Apple для Obj-C 2.0 гласит следующее: «Важно: Исключения являются ресурсоемкими в Objective-C. Вы не должны использовать исключения для общего управления потоком или просто для обозначения ошибок (таких как файл недоступен) ".
высоко ценится
* 1014 Гэри *