OC异常处理

Person.h:


#import <Foundation/Foundation.h>

#import <Foundation/NSObject.h>

@interface Cup : NSObject

{

    int level;   //成员变量-睡的深度值

}

-(int)level;   //获取水的深度

-(void)setLevel:(int)i;   //设置水的深度值

-(void)fill;   //水的深度值增加10

-(void)empty;   //水的深度值减少10

-(void)print;  //输出水的深度值

-(double)set:(double)a over:(double)b;  //计算一个百分比

@end

Person.m:


#import "Person.h"

#import "CupOverflowException.h"

#import "CupWarningException.h"

@implementation Cup:NSObject;

-(id)init  //初始化函数

{

    self = [super init];

    if(self)

    {

        [self setLevel:0];   //初始化水的深度值为0

    }

    return self;

}

-(int)level    //获取水的深度值

{

    return level;

}

-(double)set:(double)_a over:(double)_b  //计算一个百分比

{

    return _a/_b;

}

-(void)setLevel:(int)i

{

    level = i;

    if(level>100)

    {

        NSException *e = [CupOverflowException exceptionWithName:@"CupOverflowException" reason:@"The level is above 100" userInfo:nil];

        @throw e;

    }

    else if(level>=50)

    {

        NSException *e = [CupWarningException exceptionWithName:@"CupWarningException" reason:@"The level is above or at 50" userInfo:nil];

        @throw e;  //抛出警告异常

    }

    else if(level<0)

    {

        NSException *e = [NSException exceptionWithName:@"CupunderflowException" reason:@"The level is blow 0" userInfo:nil];

        @throw e;  //抛出异常

    }

}

-(void)fill   //设置水杯的水的深度值增加10

{

    [self setLevel:level+10];

}

-(void)empty  //设置水杯的水的深度减少10

{

    [self setLevel:level-10];

}

-(void)print  //输出水杯内水的深度值

{

    NSLog(@"Cup level is:%d",level);

}

@end

其他还有两个空类:CupWarningException;CupoverflowException

main:


#import <Foundation/Foundation.h>

#import "Person.h"

#import "CupOverflowException.h"

#import "CupWarningException.h"

#import <Foundation/NSException.h>

#import <Foundation/NSString.h>

#import <Foundation/NSAutoreleasePool.h>

int main(int argc, const char * argv[])

{

    //创建一个自动释放池

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];

    //分配并初始化一个水杯对象

    Cup *cup = [[Cup alloc]init];

    int i;

    for(i=0;i<4;i++)

    {

        [cup fill];

        [cup print];

    }

    for (i=0;i<7;i++) {

        @try {

            [cup fill];

        }

        @catch (CupWarningException *e) {

            NSLog(@"%@ %@",[e name],[e reason]);   //输出警告异常信息

        }

        @catch (CupOverflowException *e) {

            NSLog(@"%@ %@",[e name],[e reason]);   //输出溢出异常信息

        }

        @finally {

            [cup print];

        }

    }

    @try {

        [cup setLevel:-1];

    }

    @catch (NSException *e) {

        NSLog(@"%@ %@",[e name],[e reason]);   //输出深度小于0的异常信息

    }

    [pool release];

    [cup release];

}

结果:

CupWarningException The level is above or at 50

2013-07-31 15:53:32.053 testOC[4063:303] Cup level is:50

2013-07-31 15:53:32.053 testOC[4063:303] CupWarningException The level is above or at 50

2013-07-31 15:53:32.053 testOC[4063:303] Cup level is:60

2013-07-31 15:53:32.054 testOC[4063:303] CupWarningException The level is above or at 50

2013-07-31 15:53:32.054 testOC[4063:303] Cup level is:70

2013-07-31 15:53:32.054 testOC[4063:303] CupWarningException The level is above or at 50

2013-07-31 15:53:32.055 testOC[4063:303] Cup level is:80

2013-07-31 15:53:32.055 testOC[4063:303] CupWarningException The level is above or at 50

2013-07-31 15:53:32.055 testOC[4063:303] Cup level is:90

2013-07-31 15:53:32.056 testOC[4063:303] CupWarningException The level is above or at 50

2013-07-31 15:53:32.056 testOC[4063:303] Cup level is:100

2013-07-31 15:53:32.056 testOC[4063:303] CupOverflowException The level is above 100

2013-07-31 15:53:32.089 testOC[4063:303] Cup level is:110

2013-07-31 15:53:32.090 testOC[4063:303] CupunderflowException The level is blow 0

时间: 2024-12-09 18:12:02

OC异常处理的相关文章

iOS - OC 异常处理

1.@try 语句 @try { // Code that can potentially throw an exception 可能会抛出异常的代码块 statement . . . } @catch (NSException *exception) { // Handle an exception thrown in the @try block 处理 @try 块抛出的异常 NSLog(@"%@, %@", [exception name], [exception reason]

泛函编程(9)-异常处理-Option

    Option是一种新的数据类型.形象的来描述:Option就是一种特殊的List,都是把数据放在一个管子里:然后在管子内部对数据进行各种操作.所以Option的数据操作与List很相似.不同的是Option的管子内最多只能存放一个元素,在这个方面Option的数据操作就比List简单的多,因为使用者不必理会数据元素的位置.顺序.Option只有两种状态:包含一个任何类型的元素或者为空.或者这样讲:一个Option实例包含 0 或 1 个元素:None代表为空,Some(x)代表包含一个任

017-封装-OC笔记

学习目标 1.[了解]异常处理 2.[掌握]类方法 3.[掌握]NSString类 4.[掌握]匿名对象 5.[掌握]封装实例变量 6.[掌握]对象之间的关系 一.异常处理 什么是异常? 代码完全符合语法规范,可以编译.链接.执行,但是在程序运行的时候,当程序处于某种特定情况下的时候,程序运行就会出错,像这样的情况就叫做程序发生了异常.一旦发生异常,程序会立即奔溃.为了避免程序在发生异常的时候奔溃,OC提供了@try @catch异常处理. 异常处理语法: @try {     //可能发生异常

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

http://blog.csdn.net/shulianghan/article/details/48876843 这个漂亮的文字阴影,搞不到啊,求指教 一. Objective-C 对象简单处理 1. 包装类 (1) 包装类简介 NSValue 和 NSNumber :  -- 通用包装类 NSValue : NSValue 包装单个 short, int, long, float, char, id, 指针 等数据; -- NSNumber 包装类 : 用于包装 C 语言数据类型; NSNu

简单谈谈java的异常处理(Try Catch Finally)_java

异常的英文单词是exception,字面翻译就是"意外.例外"的意思,也就是非正常情况.事实上,异常本质上是程序上的错误,包括程序逻辑错误和系统错误. 一 前言 java异常处理大家都不陌生,总的来说有下面两点: 1.抛出异常:throw exception class SimpleException{ public void a() throws Exception{ throw new Exception(); }; } 2.捕获异常: public class MyExcepti

异常处理:android中添加按钮事件,出现NullPointerException

问题描述 异常处理:android中添加按钮事件,出现NullPointerException 解决方案 在maincsactivity的oncreate的72行找,有没有对象为null 解决方案二: 对象为空,要么你的按钮对象还没初始化,要么点击代码里有空对象,你调试一下便知 解决方案三: 空指针异常,没什么难找的,Debug一下即可很快找到: 解决方案四: 空指针异常,按钮对象没有初始化 解决方案五: 可能你声明了一个View,但是你没有findViewById,或者findViewById

WKWebView与Js实战(OC版)

前言 上一篇专门讲解了WKWebView相关的所有类.代理的所有API.那么本篇讲些什么呢?当然是实战了! 本篇文章教大家如何使用WKWebView去实现常用的一些API操作.当然,也会有如何与JS交互的实战. 如果还没有阅读过WKWebView精讲(OC版),请先阅读,不然有可能看不懂下面所讲的内容. 效果图 通过本篇文章,至少可以学习到: OC如何给JS注入对象及JS如何给IOS发送数据 JS调用alert.confirm.prompt时,不采用JS原生提示,而是使用iOS原生来实现 如何监

WKWebView API精讲(OC)

前言 鉴于LL同志对笔者说:"能不能写个OC版本的WKWebView的使用教程?",还积极打赏了30RMB,笔者又怎么好意思拒绝呢,于是才有了下文. 所有看到本篇文章的同志们,应该要感谢LL同志,更要向LL同志学习,积极打赏! WKWebView 看看WKWebView的头文件声明: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37

异常处理汇总-后端系列

异常处理汇总:http://www.cnblogs.com/dunitian/p/4599258.html SignalR   01.SignalR:"System.Reflection.TargetInvocationException"类型的未经处理的异常在 mscorlib.dll 中发生 http://www.cnblogs.com/dunitian/p/5232229.html 02.SignalR代理对象异常:Uncaught TypeError: Cannot read