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

异常的类型

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

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 test2                                                  reason:@"XXX"3                                               userInfo:nil];4     5     CustomNSException* ex = [[CustomNSException alloc] initWithName:@"CustomNSExceptionName"   // just for test6                                                  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     }

转载于:https://www.cnblogs.com/fuland/p/3668004.html

NSException异常处理相关推荐

  1. 带你打造一套APM系统(二)

    2.1. Mach 层异常处理 大体思路是:先创建一个异常处理端口,为该端口申请权限,再设置异常端口.新建一个内核线程,在该线程内循环等待异常.但是为了防止自己注册的 Mach 层异常处理抢占了其他 ...

  2. 带你打造一套 APM 监控系统(四)

    声明:尊重原创,原文地址:<带你打造一套 APM 监控系统>.本文为根据原创文章整理所得,感谢浏览. 七. Crash 监控 1. 异常相关知识回顾 1.1 Mach 层对异常的处理 Ma ...

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

    转载自:http://blog.sina.com.cn/s/blog_71715bf8010166qf.html 开篇大话: Object-C语言的异常处理符号和C++.JAVA相似.再加上使用NSE ...

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

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

  5. Objective-C Memory Management Being Exceptional 异常处理与内存

    Objective-C Memory Management    Being Exceptional  异常处理与内存 3.1Cocoa requires that all exceptions mu ...

  6. ObjC学习4-多态、动态类型、动态绑定及异常处理

    1.动态绑定和ID类型 这里建了两个灰常简单的类等会用ID类型去实现它 @interface ClassA:NSObject { } -(void) print; @end @implementati ...

  7. Go语言的错误异常处理机制及其应用

    一.背景 在日常编写golang程序或阅读别人的golang代码时,我们总会看到如下的一堆代码块: xx, err = func(xx) if err != nil {//do sth. to tac ...

  8. SpringBoot (二) :全局异常处理设置

    说在前面 在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有 ...

  9. 2021年大数据常用语言Scala(三十四):scala高级用法 异常处理

    目录 异常处理 捕获异常 抛出异常 异常处理 Scala中 无需在方法上声明异常 来看看下面一段代码. def main(args: Array[String]): Unit = {val i = 1 ...

最新文章

  1. 算法 --- 判断某个值是否在二叉搜索树中
  2. debian java7_Debian 7 和 Debian 8 用户怎样安装 Oracle Java 8
  3. 高中数学40分怎么办_高二数学不会,准高三该怎么办?40分到高考140如何逆袭?...
  4. js加载音频文件并播放,代码实例
  5. Python程序-离散和线性图形
  6. 红橙Darren视频笔记 Behavior的工作原理源码分析
  7. vc picture控件的分类总结(转载)
  8. Waymo也商业化了!“早期乘客”项目开始测试收费,凤凰城人民掏了腰包
  9. C#周立功CAN卡二次开发心得
  10. 惠普计算机如何改启动,惠普台式电脑u盘启动BIOS怎么设置
  11. 误删除文件恢复工具免费下载
  12. spyder数据分析
  13. 练习2-3 输出倒三角图案
  14. 电脑用js调用QQ客服聊天 阿星小栈
  15. 关于软件界面设计、控件颜色搭配、一些实用建议(偷懒技巧)总结——针对C# WinForm/WPF技术
  16. K8S在centeros中的部署
  17. 单枪匹马的背锅侠,终于不再是一个人的军团了
  18. 【计算机图形学】结课大作业——光照模型(3D场景)
  19. cmd命令窗口如何创建和删除文件、文件夹,写入内容到文件
  20. 异常-异常场景的测试

热门文章

  1. cocos2dx在wp上使用自定义shader
  2. js对象,原型,call,apply浅析
  3. Windows Azure虚拟机概览
  4. VS单步调试乘法语句时报错:“没有可用于当前位置的源代码”的原因
  5. html5调用手机摄像头,实现拍照上传功能
  6. 网上的一篇spring security详解教程,觉得不错,转过来了
  7. websphere内存溢出
  8. leetcode算法题--链表中倒数第k个节点
  9. C++中std::function和std::bind
  10. OpenStack Neutron浅析(四)