这是一个简单的Objective-C问题。
当您使用@try
时,工作流程可以以两种方式运行
@catch
块而不是@finally
@try
块,然后运行@finally
那么,使用或不使用@finally
块有什么区别?如果我只使用:
-(void)function{
@try {
...
}
@catch (NSException *exception) {
...
}
>>>The workflow will run this line in any case?
}
如果创建了NSException,那么将运行该函数的其余部分,还是只运行@catch
块?
答案 0 :(得分:15)
“@finally块包含无论是否抛出异常都必须执行的代码。” Does code in finally get run after a return in Objective-C?
finally块用于释放/清理开放套接字,打开文件,数据库锁,信号量锁等资源。
如果catch块内部发生错误或catch块重新抛出异常,则行:
>>>The workflow will run this line in any case?
未执行。但是,应该执行finally块中的代码。 finally块是从即将崩溃的应用程序中彻底退出的最后一个最佳机会。即使应用程序不会崩溃,它仍然是清理资源的最佳位置,因为finally块中的代码更有可能在意外情况下执行,而不是finally块之外的代码。
答案 1 :(得分:4)
有几点需要注意:
答案 2 :(得分:3)
在这里,其他人的答案中没有几点重要。
所以,关于@finally在这里的使用的整个讨论有点夸张。