Objective-C 编程语言(11)异常处理----捕获多种类型的异常、抛出异常

转载请标明出处: http://blog.csdn.net/zhangxingping

捕获多种类型的异常

在@try()代码块后面紧跟一个或者是多个@catch即可捕获@try()代码块中抛出的异常。其中在有多个@catch()代码块的时候,应该按照异常的明确程度从高到底的顺序进行排列。因此我们可以对异常进行分组处理,如列表11-1所示:

@try
{
    ….
}
@catch(CustomException  * ce) // 1
{
    ….
}
@catch(NSException * ne)  // 2
{
    ….
}
@catch (id ue)
{
    ….
}
@finally // 3
{
   //无论是否有异常,都需要在此进行那些必要的处理
}

下面的列表描述了上面代码中标号的3行代码:

1.      捕获类型明确的异常。

2.      捕获那些类型相对不够明确,也就是比较通用类型的异常。

3.      进行必要的清扫工作,不管是否捕获到了异常。

抛出异常

抛出异常的时候,首先使用适当的信息初始化一个实例,比如使用名称和产生的原因来初始化异常实例。

NSException *exception = [ NSExceptionexceptionWithName”@HotTeaException” reason:@”The tea is too hot” userInfo:nil];

重要:在很多情况下,使用异常是很常见的。例如,可以使用异常来同志某段程序不能正常执行——比如需要的文件缺失或是数据不能正确解析等。Objective-C中的异常处理是很耗资源的。因此不能使用异常处理来进行流程控制,或者用异常来代表有错误产生。相反,应该使用方法或者是函数的返回值来判断是否有错误发生,并在表示错误的对象中加入相关的信息。更多信息,请参阅《Cocoa中错误处理编程指南》。

在@catch()代码块中也是可以使用@throw命令字而不需要参数来再次把捕获到的异常进行抛出的。

Objective-C中没有限定必须抛出NSException类的对象,可以抛出任何Objective-C对象作为异常对象。NSException类提供了有助于进行异常处理的方法,但是如果我们很想使用自己定义的异常也是可以的。我们还可以通过继承NSException类来实现类型更加明确的异常,譬如文件系统异常或者是通信异常等。

发布了22 篇原创文章 · 获赞 6 · 访问量 35万+

猜你喜欢

转载自blog.csdn.net/zhangxingping/article/details/7769684