异常处理是管理非典型事件(例如未被识别的消息)的过程,此过程将会中断正常的程序执行。如果没有足够的错误处理,遇到非典型事件时,程序可能立刻抛出(或者引发)一种被称之为异常的东西,然后结束运行。

异常的类型

程序抛出异常的原因多种多样,可由硬件导致也可由软件引起。异常的例子很多,包括被零除、下溢和上异之类的数学错误,调用未定义的指令(例如,试图调用一个没有定义的方法 )以及试图越界访问群体中的元素 。

Cocoa异常由NSException对象作为载体,下面是NSException的声明:

1 @interface NSException : NSObject <NSCopying, NSCoding> {
2 @private
3 NSString *name;
4 NSString *reason;
5 NSDictionary *userInfo;
6 id reserved;
7 }
  • name — a short string that is used to uniquely identify the exception. The name is required.

  • reason — a longer string that contains a “human-readable” reason for the exception. The reason is required.

  • An optional dictionary (userInfo) used to supply application-specific data to the exception handler. For example, if the return value of a method causes an exception to be raised, you could pass the return value to the exception handler through userInfo.

你可以在异常捕获后提取有用的信息,还可以适当的弹出一个异常警告框。

抛出的异常必须是NSException或者其子类,不能是其他类。

下面提供示例代码:

 1     NSException* ex = [[NSException alloc] initWithName:@"ExceptionName"   // just for test
2 reason:@"XXX"
3 userInfo:nil];
4
5 CustomNSException* ex = [[CustomNSException alloc] initWithName:@"CustomNSExceptionName" // just for test
6 reason:@"XXX"
7 userInfo:nil];
8
9 @try {
10 bool error = YES;
11 if (error) {
12 @throw ex;
13 }
14 }
15
16 @catch ( CustomNSException *exception ) {
17 NSLog(@"CustomNSException.name = %@" , CustomNSException.name);
18 NSLog(@"CustomNSException.reason = %@" , CustomNSException.reason);
19
20 // 弹出警告框,提示异常信息
21 UIAlertView* alert = [[UIAlertView alloc] initWithTitle:CustomNSException.name
22 message:CustomNSException.reason
23 delegate:nil
24 cancelButtonTitle:nil
25 otherButtonTitles:nil];
26
27 [alert show];
28 [alert release];
29 }
30
31 @catch ( NSException *exception ) {
32 NSLog(@"exception.name = %@" , exception.name);
33 NSLog(@"exception.reason = %@" , exception.reason);
34 }
35
36 @finally {
37 NSLog(@"@finally");
38 }

NSException异常处理的更多相关文章

  1. 从C#到Objective-C,循序渐进学习苹果开发(4)--代码块(block)和错误异常处理的理解

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本文继续上一篇随笔<从 ...

  2. 浅谈Objective-C异常处理

    -----<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培 ...

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

    一个搞java的老板问我会不会try catch  我说不会 学这么久也没听周围朋友用这个 因为苹果控制台本来就可以打印异常 特此研究一下. 1.try catch:  是捕获异常代码段   特点:对 ...

  4. OC学习8——异常处理

    1.和Java一样,OC也有自己的一套异常处理机制,不同的是,OC中的异常处理机制并不是作为常规的编程实践,通常只是作为一种程序调试.排错机制. 2.与Java中类似,OC中也是采用@try...@c ...

  5. 【IOS 开发】Objective - C 面向对象高级特性 - 包装类 | 类处理 | 类别 | 扩展 | 协议 | 委托 | 异常处理 | 反射

    一. Objective-C 对象简单处理 1. 包装类 (1) 包装类简介 NSValue 和 NSNumber : -- 通用包装类 NSValue : NSValue 包装单个 short, i ...

  6. object-c的异常处理机制

    转载请注明:http://blog.sina.com.cn/s/blog_69081e060100utl5.html   一直听说iOS有异常处理机制,却从来没有关系过,今天小生就来关心下iOS的异常 ...

  7. iOS捕获异常,常用的异常处理方法

    本文转载至 http://www.cocoachina.com/ios/20141229/10787.html 前言:在开发APP时,我们通常都会需要捕获异常,防止应用程序突然的崩溃,防止给予用户不友 ...

  8. Objective-C try/catch异常处理机制原理。

    try-catch-finaly finally在任何情况下都会执行(不管有没有异常),属于整个体系的附属. 基本思想是跳到捕获锚点,重新执行. http://www.cnblogs.com/mark ...

  9. IOS开发之----异常处理

    本文转载至 http://blog.csdn.net/chenyong05314/article/details/7906593 转载自:http://blog.sina.com.cn/s/blog_ ...

随机推荐

  1. php中__clone() shallow copy 只是浅复制

    什么是浅复制呢? 简单一点,就是说复制一个对象的时候,如果对象$Obj的一个属性的类型是引用类型的,比如 $person这个属性,指向的是一个 叫做 $objPerson的一个引用, 那么复制$Obj ...

  2. openstack名称发音收集

    MariaDB:    maria['mɛərɪr] Corosync:    coro[kə'roʊ]    sync[sɪŋk] pacemaker:    [ˈpesˌmekɚ] galera: ...

  3. ReactiveNative学习之Diff算法

    React 源码剖析系列 - 不可思议的 react diff深入浅出React(四):虚拟DOM Diff算法解析React diff 算法总结链接引用的文章React出于性能的考虑,为了避免频繁操 ...

  4. label中添加图片

    创建NSTextAttachment的对象,用来装在图片 将NSTextAttachment对象的image属性设置为想要使用的图片 设置NSTextAttachment对象bounds大小,也就是要 ...

  5. photoshop如何快速切图

    作为业余爱好,之前都是用比较笨的方法切图,甚至用裁剪工具一张一张的切. 后来知道用切片工具,但也仅限于互不重叠的图片. 在工作中实际使用时才发现实在是太慢了,慢到上级自己说你不用做了,我来吧. 其实, ...

  6. 必须熟悉的vim快捷键操作

    转载请表明出处http://www.dabu.info/?p=801 Vim/Vi 没有菜单,只有命令 Vim/Vi 工作模式介绍:插入模式 和  命令模式 是vi的两个基本模式.——插入模式 ,是用 ...

  7. db2 odbc连接设置

    参考:http://www.withdata.com/blog/tips/how-to-install-and-configure-db2-odbc-driver.html 驱动下载地址:https: ...

  8. STM8建立IAR工程

    STM8是意法半导体公司出的增强型八位单片机,性能比51单片机强大,而且价格便宜,在商业应用中很受欢迎 在STM8的开发工程中主要有两种开发工具链.第一是使用IAR开发环境,第二十使用cosmic+s ...

  9. STM32的时钟树深入详解以及RCC配置

    在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法 如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT ...

  10. sql server 2008 学习笔记

    sql server 2008 删除已有的实例 想从setup.exe中区卸载,没找到. 原来还是要从控制面板中卸载,卸载Microsoft SQL Server 2008 卸载界面会提示让你选择要删 ...