常见异常捕获方法
方法 说明 -(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
捕获结束