object-c的异常处理机制

原创 2015年07月06日 19:49:42
一直听说iOS有异常处理机制,却从来没有关系过,今天小生就来关心下iOS的异常处理机制吧。

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

异常处理
Object-C提供了对于异常处理和线程同步的支持,啊哈,也就是这一章和线程(关于线程同步,大家可以看这里,http://blog.sina.com.cn/s/blog_69081e060100uomh.html)那一章要讲的内容。在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对象,但是不局限于他们。
下面是一个典型的异常处理块的例子:

Cup *cup = [[Cup allocinit];

@try { [cup fill];

@catch (NSException *exception) {

NSLog(@"main: Caught %@: %@", [exception name], [exception reason]);

} @finally {

[cup release];

}

抛出异常

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

 

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

@throw exception;


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

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

你也可以继承NSEception,来实现特殊类型的异常,比如文件系统的异常或者交互异常。
注意:不用仅限于掷出NSException对象。你可以掷出任何一个OC对象作为一场对象。NSException类提供的方法可以帮助你处理异常,但是如果你愿意你可以实现你自己的。

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

Listing 9-1An exception handler @try {

...

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

...

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

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

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

} @catch (id ue) { //3

...

} @finally { //4

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

}


下面的列表描述了数字所在行代码的含义:
1、捕获最重要的异常类型。
2、捕获一个比较重要的异常类型。
3、再次掷出捕获的异常。
为了划分异常的处理过程,你可以在应用中做一个异常处理栈。这样,如果一个方法或者函数捕获了异常但是他不能处理,他可以再次掷给下一个异常处理机制。
4.善后工作总要做地嘛,不管有没有异常,都要做善后处理。finally块总会执行的哦亲。

版权声明:本文为博主原创文章,未经博主允许不得转载。

object-c的异常处理机制

一直听说iOS有异常处理机制,却从来没有关系过,今天小生就来关心下iOS的异常处理机制吧。 以下文字是从Object-C2.0(苹果官方文档)中翻译的,特此注明。 异常处理 Object-C提供了...
  • xie244135119
  • xie244135119
  • 2014年10月28日 09:48
  • 318

java的异常处理机制详解

Java异常的处理主要依赖于try,catch,finally,throws,throw这五个关键字。下面分别介绍它们:...
  • zx64881926
  • zx64881926
  • 2016年08月24日 14:35
  • 1044

Java语言中的异常处理机制

Java中有一个Throwable的类,它有两个子类,一个是Error类,另一个是Exception类。对于错误而言,是很难解决的,比如内存溢出等,不能够通过异常处理来解决;异常是程序中发生的不正常事...
  • qq_36389108
  • qq_36389108
  • 2016年10月18日 18:33
  • 157

Java中的异常处理机制的简单原理?

答:    1:java常见异常架构图          1、  粉红色的是受检查异常(checked exception),其必须被try{}catch语句块所捕获,或者在方法签名里通过t...
  • goutiantian
  • goutiantian
  • 2015年10月28日 00:34
  • 1198

Servlet的异常处理机制

一.在Servlet中,有两种服务器端异常处理机制 1.声明试异常处理(declarative exception handling) 2.程序试异常处理(programmatic exc...
  • HEXINLI
  • HEXINLI
  • 2015年09月07日 21:48
  • 540

JAVA中的异常处理机制及异常分类

JAVA的异常处理机制:如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息的对象。此时,这个方法会立刻退出同时不返回任何值。另外,调用这个方法的...
  • sinat_36713319
  • sinat_36713319
  • 2017年04月01日 16:18
  • 3951

java异常处理机制简要概述

**Java异常处理机制**
  • glyly555
  • glyly555
  • 2017年07月15日 14:59
  • 435

C++异常处理机制总结

参考文档:《C++编程思想》《C++Primer》《More effective C++》 一、             传统的错误处理机制: 1.         返回值或全局错误状态标志。缺点:需...
  • MulinB
  • MulinB
  • 2007年08月29日 10:07
  • 2265

C++异常处理基本思想

1)C++的异常处理机制使得异常的引发和异常的处理不必在同一个函数中,这样底层的函数可以着重解决具体问题,而不必过多的考虑异常的处理。上层调用者可以再适当的位置设计对不同类型异常的处理。 2)异常是专...
  • zyq522376829
  • zyq522376829
  • 2015年07月06日 16:15
  • 1128

Java异常处理机制的简单原理和应用

异常是指Java程序运行时所发生的非正常情况或者错误,就像人们正常生活发生的意外事件、在什么地点, 可以 用一个对象来表示,Java采用面向对象的方式来处理异常,把程序中发生的每个异常都封装到一个对象...
  • JavaReact
  • JavaReact
  • 2017年07月10日 11:17
  • 647
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:object-c的异常处理机制
举报原因:
原因补充:

(最多只允许输入30个字)