苹果关于异常的详细文档:
关于自定义异常或者扩展:
Objective-C中处理异常是依赖于NSException实现的,它是异常处理的基类,它是一个实体类,而并非一个抽象类,所以你可以直接使用它或者继承它扩展使用:
1.直接使用,分两种,抛出默认的异常,和自定义自己的新的种类的异常:
- - (IBAction)btnClicked_Exception:(id)sender
- {
- NSException* ex = [[NSException alloc]initWithName:@"MyException"
- reason:@"b==0"
- userInfo:nil];
- @try
- {
- int b = 0;
- switch (b)
- {
- case 0:
- @throw(ex);//b=0,则抛出异常;
- break;
- default:
- break;
- }
- }
- @catch (NSException *exception)//捕获抛出的异常
- {
- NSLog(@"b==0 Exception!");
- }
- @finally
- {
- NSLog(@"finally!");
- }
- [ex release];
- }
- //运行的结果:
- b==0 Exception!
- finally!
2.扩展使用,这个推荐你需要自定义一些功能的时候使用,比如,当捕获到指定的异常的时候弹出警告框之类的:
- @interface MyException : NSException
- -(void)popAlert
- @end
- @implementation MyException
- - (void)popAlert
- {
- //弹出报告异常原因的警告框 reason
- UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Tips"
- message:self.reason
- delegate:nil
- cancelButtonTitle:nil
- otherButtonTitles:nil];
- [alert show];
- [alert release];
- }
- @end
使用:
- - (IBAction)btnClicked_Exception:(id)sender
- {
- MyException* ex = [[MyException alloc]initWithName:@"MyException"
- reason:@"除数为0了!"
- userInfo:nil];
- @try
- {
- int b = 0;
- switch (b)
- {
- case 0:
- @throw(ex);//b=0,则抛出异常;
- break;
- default:
- break;
- }
- }
- @catch (MyException *exception)//捕获抛出的异常
- {
- [exception popAlert];
- NSLog(@"b==0 Exception!");
- }
- @finally
- {
- NSLog(@"finally!");
- }
- [ex release];
- }
只要你愿意,你就可以随意的定制它!