NSException异常处理
异常处理是管理非典型事件(例如未被识别的消息)的过程,此过程将会中断正常的程序执行。如果没有足够的错误处理,遇到非典型事件时,程序可能立刻抛出(或者引发)一种被称之为异常的东西,然后结束运行。
异常的类型
程序抛出异常的原因多种多样,可由硬件导致也可由软件引起。异常的例子很多,包括被零除、下溢和上异之类的数学错误,调用未定义的指令(例如,试图调用一个没有定义的方法 )以及试图越界访问群体中的元素 。
Cocoa异常由NSException对象作为载体,下面是NSException的声明:
1 @interface NSException : NSObject <NSCopying, NSCoding> { 2 @private 3 NSString *name; 4 NSString *reason; 5 NSDictionary *userInfo; 6 id reserved; 7 }
A
name
— a short string that is used to uniquely identify the exception. The name is required.A
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 throughuserInfo
.
你可以在异常捕获后提取有用的信息,还可以适当的弹出一个异常警告框。
抛出的异常必须是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异常处理相关推荐
- 带你打造一套APM系统(二)
2.1. Mach 层异常处理 大体思路是:先创建一个异常处理端口,为该端口申请权限,再设置异常端口.新建一个内核线程,在该线程内循环等待异常.但是为了防止自己注册的 Mach 层异常处理抢占了其他 ...
- 带你打造一套 APM 监控系统(四)
声明:尊重原创,原文地址:<带你打造一套 APM 监控系统>.本文为根据原创文章整理所得,感谢浏览. 七. Crash 监控 1. 异常相关知识回顾 1.1 Mach 层对异常的处理 Ma ...
- IOS开发之----异常处理
转载自:http://blog.sina.com.cn/s/blog_71715bf8010166qf.html 开篇大话: Object-C语言的异常处理符号和C++.JAVA相似.再加上使用NSE ...
- 【IOS 开发】Objective - C 面向对象高级特性 - 包装类 | 类处理 | 类别 | 扩展 | 协议 | 委托 | 异常处理 | 反射
一. Objective-C 对象简单处理 1. 包装类 (1) 包装类简介 NSValue 和 NSNumber : -- 通用包装类 NSValue : NSValue 包装单个 short, i ...
- Objective-C Memory Management Being Exceptional 异常处理与内存
Objective-C Memory Management Being Exceptional 异常处理与内存 3.1Cocoa requires that all exceptions mu ...
- ObjC学习4-多态、动态类型、动态绑定及异常处理
1.动态绑定和ID类型 这里建了两个灰常简单的类等会用ID类型去实现它 @interface ClassA:NSObject { } -(void) print; @end @implementati ...
- Go语言的错误异常处理机制及其应用
一.背景 在日常编写golang程序或阅读别人的golang代码时,我们总会看到如下的一堆代码块: xx, err = func(xx) if err != nil {//do sth. to tac ...
- SpringBoot (二) :全局异常处理设置
说在前面 在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有 ...
- 2021年大数据常用语言Scala(三十四):scala高级用法 异常处理
目录 异常处理 捕获异常 抛出异常 异常处理 Scala中 无需在方法上声明异常 来看看下面一段代码. def main(args: Array[String]): Unit = {val i = 1 ...
最新文章
- 算法 --- 判断某个值是否在二叉搜索树中
- debian java7_Debian 7 和 Debian 8 用户怎样安装 Oracle Java 8
- 高中数学40分怎么办_高二数学不会,准高三该怎么办?40分到高考140如何逆袭?...
- js加载音频文件并播放,代码实例
- Python程序-离散和线性图形
- 红橙Darren视频笔记 Behavior的工作原理源码分析
- vc picture控件的分类总结(转载)
- Waymo也商业化了!“早期乘客”项目开始测试收费,凤凰城人民掏了腰包
- C#周立功CAN卡二次开发心得
- 惠普计算机如何改启动,惠普台式电脑u盘启动BIOS怎么设置
- 误删除文件恢复工具免费下载
- spyder数据分析
- 练习2-3 输出倒三角图案
- 电脑用js调用QQ客服聊天 阿星小栈
- 关于软件界面设计、控件颜色搭配、一些实用建议(偷懒技巧)总结——针对C# WinForm/WPF技术
- K8S在centeros中的部署
- 单枪匹马的背锅侠,终于不再是一个人的军团了
- 【计算机图形学】结课大作业——光照模型(3D场景)
- cmd命令窗口如何创建和删除文件、文件夹,写入内容到文件
- 异常-异常场景的测试
热门文章
- cocos2dx在wp上使用自定义shader
- js对象,原型,call,apply浅析
- Windows Azure虚拟机概览
- VS单步调试乘法语句时报错:“没有可用于当前位置的源代码”的原因
- html5调用手机摄像头,实现拍照上传功能
- 网上的一篇spring security详解教程,觉得不错,转过来了
- websphere内存溢出
- leetcode算法题--链表中倒数第k个节点
- C++中std::function和std::bind
- OpenStack Neutron浅析(四)