gpt4 book ai didi

objective-c - 执行清理代码?

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:25 24 4
gpt4 key购买 nike

一般来说 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 这三个 block 必须全部放在一起,您无法灵活地将可能想要绕过的代码放在@catch 和@finally 之间。

(2) Apple 的 Obj-C 2.0 文档说明如下:“重要提示:异常在 Objective-C 中是资源密集型的。您不应该将异常用于一般流程控制,或仅仅表示错误(例如文件不可访问)”。

非常感谢

加里

最佳答案

这是 C 代码中的常见习语,在没有具有更全面的创建/销毁语义的语言的情况下,我认为它没有任何问题。

Goto 在一般意义上被认为是有害的;它会使程序执行变得难以理解。在这里,它的范围非常有限,并且流向是单向的。从某种意义上说,它也很有用,因为它允许您本地化清理代码,这是一件好事。

关于objective-c - 执行清理代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2038471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com