常见异常捕获方法
方法 | 说明 |
-(BOOL)isKindOfClass:(Class)aClass | 判断一个对象是不是指定类或者指定类的子类的实例 |
-(BOOL)isMemberOfClass:(Class)aClass | 判断一个对象是不是指定类的实例 |
+(BOOL)isSubclassOfClass:(Class)aClass | 判断某个类是不是指定类的子类 |
+(BOOL)instancesResponfToSelector:(SEL)aSelector | 判断某个对象是否响应指定方法(向类发送消息) |
-(BOOL)responfToSelector:(SEL)aSelector | 判断某个对象是否响应指定方法(向实例发送消息) |
-(id)performSelector:(SEL)aSelector | 调用某个方法,在运行阶段才可以发现错误(与直接调用的区别) |
异常捕获的一边格式:
@try {
<#statements#>
}
@catch (NSException *exception) { // @catch捕获@try()代码块中抛出的异常
<#handler#>
}
@finally {
<#statements#> //无论是否存在异常,最好在此做些必要的处理
}
例:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSException* pE=[[NSException alloc]init];
//自定义异常
pE=[NSException exceptionWithName:@"出错了" reason:@"被除数不能为0" userInfo:nil];
int nNum1=81;//初始化除数
int nNum2=0;//初始化被除数
int nResult=0;
@try {
//如果nNum2=0(即被除数为0)抛出异常
if (nNum2==0) {
@throw pE;
}
else
{
//如果被除数不为0,则执行以下语句
nResult=nNum1/nNum2;
NSLog(@"nResult=%i",nResult);
}
}
@catch (NSException *exception) {//抛出异常
NSLog(@"%@ %@",[exception name],[exception reason]);
}
@finally {
NSLog(@"捕获结束");
}
}
return 0;
}
结果:
出错了 被除数不能为0
捕获结束