-----<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中处理它。

最新文章

  1. javascript中怎么判断对象{}为空
  2. border 变形计
  3. VS2008注册码
  4. django: template - built-in tags
  5. DAL – RDBMS 的分区
  6. java api例子网站
  7. paramiko socket.error: Int or String expected
  8. ASP.NET开发大杂烩
  9. UIImage类方法总结及UIImage生成方法对比
  10. centos通过yum安装mysql
  11. 题解-洛谷P1020P导弹拦截(求单调序列长度的优化)
  12. Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) E: Unable to lock the administration di
  13. 使用Builder模式造车
  14. 将exe依赖运行的dll,合并入exe中,整个程序仅存在一个exe文件
  15. sqlplus 方式连接 远程数据库
  16. 实现ping程序
  17. ThinkPHP整合短信通知功能
  18. P4python: python interface to Perforce API
  19. flash读写学习笔记与spi接口及简单测试验证(三)
  20. 【Tarjan算法】【DFS】Petrozavodsk Summer Training Camp 2016 Day 9: AtCoder Japanese Problems Selection, Thursday, September 1, 2016 Problem B. Point Pairs

热门文章

  1. 解决在 MVC  局部视图中加载 ueditor 编辑器时, 编辑器加载不出的 bug
  2. WebLogic集群案例分析
  3. 在C++中调用DLL中的函数 (3)
  4. 【MySQL】SQL语句嵌套1
  5. SQL:判断某些元素是否存在及创建的SQL语句
  6. Track files and folders manipulation in Windows
  7. 基于IIS的HTTP、FTP文件服务器搭建与性能测试
  8. Android WebRTC 音视频开发总结(五)-- webrtc开发原型
  9. openssl mac中使用终端生成RSA私钥和公钥文件
  10. CentOS 6.X版本升级PHP