浅谈Objective-C异常处理
-----<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
错误实际是生命中一个事实,即便最完美的程序员,也有会 运行时产生错误的代码,本文和大家一起交流这样的情况。
我们通常会遇到两种错误:编译时的错误和运行是的错误,编译是的错误是那些由编译器引发的错误,并且,我们必须在继续供工作之前修正这些错误。运行时错误发生在程序运行时,即便代码已经很好地编译。运行时的错误通常叫异常。
Objective-C,可以处理异常,但是这么做的方式根据平台不同而有不同。在本文中,本人将使用GNUstep处理异常方式,正如你所知道,这是比较常用的方式方法。
这里异常发生时候,我们使用NS_DURING和NS_HANDLER这样的宏来处理,异常,例如,如下代码创建并定制并且随后报告它:
man.m
#import <Foundation/Foundation.h>
#import <stdio.h> int main()
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSException *myException =[[NSException alloc] initWithName:@"myException" reason:@"Meltdown!" userInfo:nil];
[myException raise];
[pool release];
}
NS_HANDLER
{
printf("In error handler \n");
if([[localException] name]isEqualToString:@"myException"])
{
printf("Meltdown error.\n");
}
} NS_ENDHANDLER
{
printf("In end handler.");
} return 0;
}
捕获异常
无论何时,代码都可能会引发异常——例如,除以0——我们将其包围在如下的下一个
NS_DURING
{
[Sensitive code];
}
这是GNUstep异常处理中的第一步:发生在NS_DURING宏中任何异常都可以在一个NS_HANDLER宏中处理,下一个任务将介绍这一点。
处理异常
当一个异常发生的时候,我们可以在NS_HANDLER宏中处理异常,这是放置异常处理代码的位置,我们将在本任务中看到这一点。创建的main.m的程序,在main.m,这段代码创建了NS_DURING宏。输入代码以添加NS_HANDER宏,当发生异常的时候,它将会运行。
创建异常
现在,我们将将要引发一个异常,以便可以处理可以处理它并代码像预期的那样工作。在这个任务中,我们将创建一个异常对象,然后引发该异常,这会引起异常真正地发生,然后捕获异常。
把异常向上传递到调用堆栈
有时候,我们处理异常的时候,先要把异常向上传递到调用堆栈,传给调用函数中异常处理代码。我们可以直接在HS_HANDLER再次引发一个异常,从而一个异常,从而做到这点,就像这个任务中所做的那样。
捕获未捕获的异常、
我们可以设置一个特殊一个的函数,通过调用NSSetUncaghtExceptionHandler(fn_ptr)来捕获所有未捕获的异常,其中fn_ptr是一个函数的指针(就像是一个标准 指针,只不过它指向一个函数),这个函数的oidNSUncaughtExceptionHandler(NSException*Exception)。因此,如果我们没有在任何其他地方处理一个异常,那么将会在NSSetUncaghtExceptionHandler中处理它。
浅谈Objective-C异常处理的更多相关文章
- 浅谈Objective—C中的面向对象特性
Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...
- 浅谈objective—C管理内存
这段时间被导师催着论文,调试各种BUg,也是醉了,发现很大程度上,内存出错,栈溢出,各种悲剧.那么今天就和大家一起对OC的内存管理来个探微吧.Objective-C使用一个保留计数记录了我们所创建的所 ...
- 浅谈java中异常处理
java语言的异常捕获结构是由try.catch.finally,try中语句块是可能发生异常的java语句,catch用来激发捕获的异常,try语句块中如果发生异常,则调到catch语句块中执行ca ...
- 浅谈Java的throw与throws
转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...
- 浅谈Hybrid技术的设计与实现
前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术的设计与实现第三弹——落地篇 随着移动浪潮的兴起,各种APP层出不穷,极速的业务扩展提升了团队对开发 ...
- jsp内置对象浅谈
jsp内置对象浅谈 | 浏览:1184 | 更新:2013-12-11 16:01 JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对 ...
- [C#]6.0新特性浅谈
原文:[C#]6.0新特性浅谈 C#6.0出来也有很长一段时间了,虽然新的特性和语法趋于稳定,但是对于大多数程序猿来说,想在工作中用上C#6.0估计还得等上不短的一段时间.所以现在再来聊一聊新版本带来 ...
- Android安全开发之启动私有组件漏洞浅谈
0x00 私有组件浅谈 android应用中,如果某个组件对外导出,那么这个组件就是一个攻击面.很有可能就存在很多问题,因为攻击者可以以各种方式对该组件进行测试攻击.但是开发者不一定所有的安全问题都能 ...
- 【WebApi系列】浅谈HTTP
[01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi如何传递参数 [04]详解WebApi测试和PostMan [05]浅谈WebApi Core ...
- 【WebApi系列】浅谈HTTP在WebApi开发中的运用
WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...
随机推荐
- Android Studio 实用插件整理
首先说一下安装方法: 上图片: 首先点击Android stuido 菜单 File->Settings 进入上图界面: 区域1:你当前已经安装了的插件 区域3:在线安装 区域2:其实和区域3是 ...
- 家业兴衰说传承(cc)
家业兴衰说传承 2011年10月30日 09:53 选稿:天潼 来源:东方网 作者:万润龙 浙商走笔之九 “富贵子生浪荡子,浪荡子生苦恼子,苦恼子生勤奋子,勤奋子生富贵子”.这“四子歌”是流传在浙 ...
- 在AX4.0中使用C#脚本的实现
1,虽然ms收购了ax,但是在ax低版本(ver<=4.0)中,还没有办法直接使用ms现在主推的.net技术. 通常的做法是现在AX中天津.net的引用,然后才能在代码中使用.net的一些对象以 ...
- asp.net Global.asax 方法的使用和说明
Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法你可以使用这个文件实现应用程序安全性以及其它一些任务下面让我们详细看一 ...
- Objective-C中#define的常见用法
参考博客 http://blog.csdn.net/kindazrael/article/details/8108868 在C语言中,预处理代码是非常强大的工具,能让代码变得可读性和可维护性更强.预处 ...
- LINQ to XML 实战
LINQ to XML 轴定义:创建XML树或将XML文档加载到XML树之后,可以进行查询,从而查找元素并检索它们的值. 两类轴方法:-一些轴就是XELement和XDocument类中返回IEnum ...
- UnityVS 2013的使用
如果已安装旧版,先卸载,然后在安装新版本: 安装完毕后,打开Unity,在Build Settings中设置: Import the Visual Studio Tools Unity package ...
- JMeter笔记4:测试结果-聚合报告的字段说明
1.Lable :定义 HTTP 请求名称2.Samples :表示这次测试中一共发出了多少个请求3.Average :平均响应时长---默认情况下是单个Request的平均响应时长,当使用Trans ...
- C# Webservice 解决在运行配置文件中指定的扩展时出现异常。 ---> System.Web.HttpException: 超过了最大请求长度问
摘自: http://blog.csdn.net/gulijiang2008/article/details/4482993 请在服务器端配置 方法一: 在通过WebService处理大数据量数据时出 ...
- 四、Struts2的执行过程和原理
执行过程和原理(可能面试题) 学习目标:熟知struts2的执行过程(下图记住).源码可以不看 a.过滤器的初始化 .StrutsPrepareAndExecuteFilter是一个过滤器,过滤器就有 ...