Objective-C:除数为0的情况下异常的处理,检测、抛出、捕捉、处理

 1 //  DivTest.h
 2 //  异常的处理
 3 //
 4 //  Created by ma c on 15/8/11.
 5 //  Copyright (c) 2015年. All rights reserved.
 6 //
 7 
 8 #import <Foundation/Foundation.h>
 9 
10 @interface DivTest : NSObject
11 @property(nonatomic,assign)CGFloat x;
12 @property(nonatomic,assign)CGFloat y;
13 @property(nonatomic,assign)CGFloat div;
14 -(id)initWithX:(CGFloat) m andY:(CGFloat) n;
15 -(void)print;
16 @end

// 上面为类的声明部分

//类的实现部分

 1 //  DivTest.m
 2 //  异常的处理
 3 //
 4 //  Created by ma c on 15/8/11.
 5 //  Copyright (c) 2015年. All rights reserved.
 6 //
 7 
 8 #import "DivTest.h"
 9 #import "MyException.h"
10 @implementation DivTest
11 -(id)initWithX:(CGFloat) m andY:(CGFloat) n
12 {
13     MyException *me;
14     self = [super init];
15     if(self!=nil)
16     {
17         _x = m;
18         _y = n;
19         if(_y==0)
20         {//如果_y=0,说明除数为零了,抛出异常给调用者去处理
21           @throw  me = [[MyException alloc]initWithName:@"MyException:" reason:@"除数为零了" userInfo:nil];
22         }
23     }
24     return self;
25 }
26 -(void)print
27 {
28     NSLog(@"div:%.2f",_x/_y);
29 }
30 @end

//异常的声明和定义部分

 1 //  MyException.h
 2 //  异常的处理
 3 //
 4 //  Created by ma c on 15/8/11.
 5 //  Copyright (c) 2015年. All rights reserved.
 6 //
 7 
 8 #import <Foundation/Foundation.h>
 9 
10 @interface MyException : NSException
11 
12 @end
13 
14 
15 //  MyException.m
16 //  异常的处理
17 //
18 //  Created by ma c on 15/8/11.
19 //  Copyright (c) 2015年 bjsxt. All rights reserved.
20 //
21 
22 #import "MyException.h"
23 
24 @implementation MyException
25 
26 @end

//主函数中对异常的测试和处理

 1 //  main.m
 2 //  异常的处理
 3 //
 4 //  Created by ma c on 15/8/11.
 5 //  Copyright (c) 2015年. All rights reserved.
 6 //
 7 
 8 #import <Foundation/Foundation.h>
 9 #import "DivTest.h"
10 #import "MyException.h"
11 int main(int argc, const char * argv[])
12 {
13     @autoreleasepool
14     {
15         DivTest *dt;
16         @try
17         {   //检测除数为0的异常
18             dt = [[DivTest alloc]initWithX:4 andY:0];
19         }
20         @catch(MyException *e)
21         {   //捕捉除数为零的异常
22             NSLog(@"MyException:%@",[e reason]);
23         }
24         @catch(NSException *e)
25         {  //捕捉其他的异常
26             NSLog(@"Exception:%@",[e reason]);
27         }
28         @finally
29         {  //一定要执行的代码块
30             [dt print];
31         }
32     }
33     return 0;
34 }