@try { // 业务逻辑 } @catch (异常类型名1 ex) { //异常处理代码 } @catch (异常类型名2 ex) { //异常处理代码 } // 可以捕捉 N 个 异常 ... @finally { //回收资源 } //捕获后执行的代码
这是苹果的一种异常捕获机制,不常用
将可能出现异常的代码放在@try里,如果出现异常,会查找是否有处理这个异常的catch,在catch里处理完毕之后,执行@finally中的代码
@catch中也可能再次抛出异常,如果有异常没有被catch处理的话,finally中的代码会执行,finally后面的代码不会执行
ios中很少用到try和catch
简单的来说,Apple虽然同时提供了错误处理(NSError)和异常处理(exception)两种机制,但是Apple更加提倡开发者使用NSError来处理程序运行中可恢复的错误。而异常被推荐用来处理不可恢复的错误。
原因有几个,在非gc情况下,exception容易造成内存管理问题(文档有描述即使是arc下,也不是安全的);exception使用block造成额外的开销,效率较低等等,另外这也的确是Cocoa开发者的习惯。
try catch还有一个灵活的巧用:
有时候我们加的全局断点并不能跳到异常的代码块,并且没有答应任何异常信息,
我们根据异常的上下文 找到异常代码块但是不知道到底是报的什么异常,
那么可以对那个异常代码块包上一个try catch ,
然后在catch中打印exception的内容,这样就能够知道到底是出现了什么异常。
每当出现bug或者crash的时候,我们总是习惯性的加入了NSLog或则单步调试。