您的位置:首页 > 移动开发 > IOS开发

IOS开发之--异常处理--使用try 和 catch 来捕获错误。

2014-08-29 22:55 821 查看
一个搞java的老板问我会不会try catch 我说不会 学这么久也没听周围朋友用这个 因为苹果控制台本来就可以打印异常

特此研究一下。

1.try catch: 是捕获异常代码段 特点:对代码的实时监控 占用大量资源

2.ios中很少用到try 和catch

简单的来说,Apple虽然同时提供了错误处理(NSError)和异常处理(exception)两种机制,但是Apple更加提倡开发者使用NSError来处理程序运行中可恢复的错误。而异常被推荐用来处理不可恢复的错误。

原因有几个,在非gc情况下,exception容易造成内存管理问题(文档有描述即使是arc下,也不是安全的);exception使用block造成额外的开销,效率较低等等,另外这也的确是Cocoa开发者的习惯。(http://blog.csdn.net/x32sky/article/details/23753597)//怪不得我没听周围IOS开发人员用这个


3.try,catch,finally执行流程 (http://blog.csdn.net/phoenix001/article/details/4293472)

try{
//1:抛出异常的代码
//2:代码
}catch(){
//3:代码
//4:抛出异常
}finally{
//5:代码
}
//6:代码
首先要明确的一点是:不管try是否抛出异常,finally语句块都会执行。
小心注意6!!

整个try,catch,finally执行有以下几种情况:

1:try语句块没有抛出异常。如果是这种情况,程序会执行try,finally以及finally块之后的代码;

2:try语句块抛出了异常并且catch有匹配的异常。当遇到try里面抛出的异常后,try块里面剩下的代码就不执行了,跳转到catch块里面。

这里又可以分为2种情况。第一种,抛出的异常被后面的catch捕获,而catch又没有抛出新的异常,那么执行顺序是1356 ;第二种,如果catch里面又抛出新的异常,顺序是1345,然后将新的异常返回给方法调用者,6就不执行了 ;

3:try语句块抛出了异常,但是后面的catch没有能匹配的异常。那么会执行try和finally里面的语句也就是15,然后将该异常返回给方法调用者,不执行6 。
总结:
如果异常不能被捕捉的话,finally{}后面的语句就不会执行了,而finally{}一定被执行


4.举例使用

@try{

}
@catch(NSException *exception) {
NSLog(@"exception:%@", exception);
}
@finally {

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: