在@ try- @ catch- @ finally块中,最终是好用还是继续正常?

Rod*_*igo 16 oop error-handling objective-c try-catch

这是一个简单的Objective-C问题.

当您使用@try工作流程时,可以以2种方式运行

  • 如果出现一些NSException,代码会立即跳转到@catch阻止而不是@finally
  • 如果没有,完成运行@try块然后运行@finally

那么,使用或不使用@finally块有什么区别?如果我只使用:

-(void)function{
    @try {
     ...
    }
    @catch (NSException *exception) {
     ...
    }
    >>>The workflow will run this line in any case?
}
Run Code Online (Sandbox Code Playgroud)

将运行该函数的其余部分,或者仅在@catch创建NSException时阻止该块?

aho*_*fer 15

"@finally块包含无论是否抛出异常都必须执行的代码." 最后的代码是在Objective-C中返回后运行的吗?

finally块用于释放/清理开放套接字,打开文件,数据库锁,信号量锁等资源.

如果catch块内部发生错误或catch块重新抛出异常,那么行:

>>>The workflow will run this line in any case?
Run Code Online (Sandbox Code Playgroud)

没有执行.但是,应该执行finally块中的代码.finally块是从即将崩溃的应用程序中彻底退出的最后一个最佳机会.即使应用程序不会崩溃,它仍然是清理资源的最佳位置,因为finally块中的代码更有可能在意外条件下执行,而不是finally块之外的代码.