obj-c编程07:异常处理
好了,到了相对轻松的话题,也是所有语言无可避免的话题:异常的处理。
我们知道对于一些常见的语言,“异常”是逃不开避不掉的主题:C中相对原始的signal或依赖系统异常支持(比如windows),C++和C#以及java中完善的内置语法,还有ruby中灵活的动态方式,在这里我们看到的是和java类似的obj-c的方法:
- #import <Foundation/Foundation.h>
- int main(int argc,char *argv[])
- {
- @autoreleasepool{
- NSLog(@"hello obj-c!");
- int i = 0,j = 100;
- @try{
- i = j / i;
- NSLog(@"Do you see me???");
- }
- @catch(NSException *e){
- NSLog(@"caught %@:%@",[e name],[e reason]);
- }
- }
- return 0;
- }
我们还可以用@throw抛出自己的异常:
- #import <Foundation/Foundation.h>
- @interface MyError:NSException
- @end
- @implementation MyError
- -(NSString*)name{
- return @"My ERROR!NEVER!";
- }
- -(NSString*)reason{
- return @"NO REASON!";
- }
- @end
- int main(int argc,char *argv[])
- {
- @autoreleasepool{
- NSLog(@"hello obj-c!");
- MyError *mye = [[MyError alloc] init];
- int i = 0,j = 100;
- @try{
- @throw mye;
- i = j / i;
- NSLog(@"Do you see me???");
- }
- @catch(NSException *e){
- NSLog(@"caught %@:%@",[e name],[e reason]);
- }
- }
- return 0;
- }
apple@kissAir: objc_src$./3
2014-06-30 11:05:40.389 3[1280:507] hello obj-c!
2014-06-30 11:05:40.391 3[1280:507] *** Terminating app due to uncaught exception of class 'nil'
libc++abi.dylib: terminating with uncaught exception of type nil
Abort trap: 6
呀!执行咋错了呢?只能用NSException类吗?原因不明啊:
- #import <Foundation/Foundation.h>
- @interface MyError:NSException
- @end
- @implementation MyError
- -(NSString*)name{
- return @"My ERROR!NEVER!";
- }
- -(NSString*)reason{
- return @"NO REASON!";
- }
- @end
- int main(int argc,char *argv[])
- {
- @autoreleasepool{
- NSLog(@"hello obj-c!");
- //MyError *mye = [[MyError alloc] init];
- int i = 0,j = 100;
- @try{
- @throw [NSException exceptionWithName: @"MyERROR" \
- reason: @"NoREASON!" userInfo: nil]3;
- i = j / i;
- NSLog(@"Do you see me???");
- }
- @catch(NSException *e){
- NSLog(@"caught %@:%@",[e name],[e reason]);
- }
- }
- return 0;
- }
最后介绍一下@finally的语法,@finally类似于java中的finally或者ruby中的ensure语句,表示无论发生啥都必须执行的代码,常常用在确保资源释放的场所:
- int main(int argc,char *argv[])
- {
- @autoreleasepool{
- NSLog(@"hello obj-c!");
- //MyError *mye = [[MyError alloc] init];
- int i = 0,j = 100;
- @try{
- @throw [NSException exceptionWithName: @"MyERROR" \
- reason: @"NoREASON!" userInfo: nil];
- i = j / i;
- NSLog(@"Do you see me???");
- }
- @catch(NSException *e){
- NSLog(@"caught %@:%@",[e name],[e reason]);
- }
- @finally{
- NSLog(@"in finally,you must see me!!!");
- }
- }
- return 0;
- }
apple@kissAir: objc_src$clang -fobjc-arc -framework Foundation 3.m -o 3
apple@kissAir: objc_src$./3
2014-06-30 11:09:34.263 3[1304:507] hello obj-c!
2014-06-30 11:09:34.265 3[1304:507] caught MyERROR:NoREASON!
2014-06-30 11:09:34.265 3[1304:507] in finally,you must see me!!!
obj-c编程07:异常处理的更多相关文章
- 简学Python第六章__class面向对象编程与异常处理
Python第六章__class面向对象编程与异常处理 欢迎加入Linux_Python学习群 群号:478616847 目录: 面向对象的程序设计 类和对象 封装 继承与派生 多态与多态性 特性p ...
- python面向对象07/异常处理
python面向对象07/异常处理 目录 python面向对象07/异常处理 1. 异常错误分类 2. 什么是异常? 3. 异常处理 4. 为什么要有异常处理 5. 异常处理的两种方式 1.if判断 ...
- Python3基础(6)面向对象编程、异常处理
---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...
- msp430入门编程07
msp430中C语言的函数及实现07 msp430中C语言操作端口I/O10 msp430中C语言的模块化头文件及实现11 msp430中C语言的模块化头文件及库文件12 msp430入门学习 msp ...
- C++ GUI Qt4编程(07)-3.1menu
1. C++ GUI Qt4编程第三章,添加menu菜单. 2. mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include < ...
- msp430项目编程07
msp430中项目---简单计算器 1.扫描键盘工作原理 2.电路原理说明 3.代码(显示部分) 4.代码(功能实现) 5.项目总结 msp430项目编程 msp430入门学习
- Java并发编程(07):Fork/Join框架机制详解
本文源码:GitHub·点这里 || GitEE·点这里 一.Fork/Join框架 Java提供Fork/Join框架用于并行执行任务,核心的思想就是将一个大任务切分成多个小任务,然后汇总每个小任务 ...
- Linux高级编程--07.进程间通信
每个进程各自有不同的用户地址空间,进程之间要交换数据必须通过在内核中开辟缓冲区,从而实现数据共享. 管道 管道是一种最基本的IPC机制,由pipe函数创建: int pipe(int filedes[ ...
- Linux - 简明Shell编程07 - 数组(Array)
脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 #!/bin/bash test0=() # 定义数组 ...
随机推荐
- Dynamics CRM 将实体从高级查找列表中移除不可见
有时我们不需要将某个实体显示给一般用户比如配置实体,但是这种类型的实体有时候又需要给一般用户读权限ODATA的时候得能读,站点地图上的隐藏比较容易用工具配置下权限即可.其实做到这步一般就可以了但有的客 ...
- ROS(indigo)ABB机器人MoveIt例子
ROS(indigo)ABB机器人例子 参考网址: 1 http://wiki.ros.org/Industrial 2 http://wiki.ros.org/abb 3 https://gi ...
- 开源项目——小Q聊天机器人V1.0
小Q聊天机器人V1.0 http://blog.csdn.net/baiyuliang2013/article/details/51386281 小Q聊天机器人V1.1 http://blog.csd ...
- Java中类的创建及类与对象的关系
//import java.util.Scanner; //创建一个类 class Person{ //属性和方法的定义不是必须的 //属性 String name ; int age ; //方法 ...
- WIP完工入库及完工退回的几个重要问题
1.必须向CST_COMP_SNAP_INTERFACE表中插入此工单所有工序的数据(也就是说同样的工单插入多条,只是工序号不一样) 标准文档: Note: If there are multiple ...
- LOV里的值直接引用系统里定义的值集的值,且具有值集的安全性控制
fnd_flex_server.check_value_security(p_security_check_mode => 'YH', p_flex_value_set_id => p_f ...
- javascript setinterval 正确的语法
前几天我用setinterval 写了一个小程序,这个setinterval是用来干什么的我就不解释了. 写的方法在其它的浏览器里都能用,后来测试组的同事拿去一测就出了问题.因为她们爱用360,还有I ...
- iOS中 数据持久化 UI高级_17
数据持久化的本质就是把数据由内写到本地(硬盘中),在iOS指将数据写到沙盒文件夹下: 沙盒机制:指的就是采用沙盒文件夹的形式管理应用程序的本地文件,而且沙盒文件夹的名字是随机分配的,采用十六进制方法命 ...
- JAVA之旅(十二)——Thread,run和start的特点,线程运行状态,获取线程对象和名称,多线程实例演示,使用Runnable接口
JAVA之旅(十二)--Thread,run和start的特点,线程运行状态,获取线程对象和名称,多线程实例演示,使用Runnable接口 开始挑战一些难度了,线程和I/O方面的操作了,继续坚持 一. ...
- 手把手带你做一个超炫酷loading成功动画view Android自定义view
写在前面: 本篇可能是手把手自定义view系列最后一篇了,实际上我也是一周前才开始真正接触自定义view,通过这一周的练习,基本上已经熟练自定义view,能够应对一般的view需要,那么就以本篇来结尾 ...