iOS try catch的使用

一直听说iOS有异常处理机制,却从来没有关系过,今天小生就来关心下iOS的异常处理机制吧。

以下文字是从Object-C2.0(苹果官方文档)中翻译的,特此注明。

异常处理

Object-C提供了对于异常处理和线程同步的支持,啊哈,也就是这一章和线程那一章要讲的内容。在GNU编译器(GCC)3.3或以上版本上使用-fobjc-exceptions指令,可以支持以上特性。

注意:要在一个应用里同时使用这些特性,应用必须在MAC OS X v10.3或者以上版本中。因为早期版本的运行环境不支持异常处理和线程同步。

处理异常

Object-C语言的异常处理符号和C++、JAVA相似。再加上使用NSException,NSError或者自定义的类,你可以在你的应用程序里添加强大的错误处理机制。

异常处理机制是由这个四个关键字支持的:@try,@catch,@thorw,@finally。当代码有可能出现异常时,我们把他放到@try语句块中。@catch()块包含了处理@try块里的抛出的异常的逻辑。无论异常是否发生,@finally块里面的语句都会执行。如果直接使用@throw块来抛出异常,这个异常本质上是一个OC的对象。咱们可以使用NSException对象,但是不局限于他们。

下面是一个典型的异常处理块的例子:

  1. Cup *cup = [[Cup alloc] init];

  2. @try { [cup fill];

  3. } @catch (NSException *exception) {

  4. NSLog(@”main: Caught %@: %@”, [exception name], [exception reason]);

  5. } @finally {

  6. [cup release];

  7. }
复制代码

抛出异常

为了掷出一个异常,我们必须实例化一个对象,当然这个对象要包含相关的信息,比如异常的名字和为什么要掷出他。

  1. NSException *exception = [NSException exceptionWithName:@"HotTeaException" reason:@"The tea is too hot" userInfo:nil];

  2. @throw exception;
复制代码

(好吧 我承认国外的程序员挺有爱的。)

和@catch()块相反,你可以使用@throw再次掷出一个被抓到的异常,不用加参数哦亲。这个能使你的代码更可读。(我怎么没看出来)

你也可以继承NSEception,来实现特殊类型的异常,比如文件系统的异常或者交互异常。

注意:不用仅限于掷出NSException对象。你可以掷出任何一个OC对象作为一场对象。NSException类提供的方法可以帮助你处理异常,但是如果你愿意你可以实现你自己的。


高端处理异常(尼玛这标题怎么翻啊,来去就是这几个单词,老外哥哥你敢不敢换几个啊)

为了捕获一个使用@try块掷出的异常,你可以在@try后面使用多个@catch()块,可以用多个哦亲。@catch块可以由最特殊的到最普遍的排序(我觉得翻译成重要不重要的比普遍好多了,但是尊重GOOGLE,你们懂的)。这样你就可以度身订造你的异常处理过程。就像下面所示的那样9-1(原谅我的不专业吧 兄弟们):

Listing 9-1

  1. An exception handler @try {



  2. } @catch (CustomException *ce) { //1



  3. } @catch (NSException *ne) { //2

  4. // Perform processing necessary at this level. …

  5. // Rethrow the exception so that it’s handled at a higher level. @throw;

  6. } @catch (id ue) { //3



  7. } @finally { //4

  8. // Perform processing necessary whether an exception occurred or not. …

  9. }
复制代码

下面的列表描述了数字所在行代码的含义:

1、捕获最重要的异常类型。

2、捕获一个比较重要的异常类型。

3、再次掷出捕获的异常。

为了划分异常的处理过程,你可以在应用中做一个异常处理栈。这样,如果一个方法或者函数捕获了异常但是他不能处理,他可以再次掷给下一个异常处理机制。

4.善后工作总要做地嘛,不管有没有异常,都要做善后处理。finally块总会执行的哦亲。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值