ios NSException 异常处理

来源:互联网 发布:mac玩国服lol 编辑:程序博客网 时间:2024/05/17 04:24

1.NSException,捕获异常的原则是先细后广。

NSException* ex = [[NSException alloc] initWithName:@"ExceptionName"   // just for test 2                                                  reason:@"XXX" 3                                               userInfo:nil]; 4      5     CustomNSException* ex = [[CustomNSException alloc] initWithName:@"CustomNSExceptionName"   // just for test 6                                                  reason:@"XXX" 7                                                userInfo:nil]; 8      9     @try {10         bool error = YES;11         if (error) {12             @throw ex;13         }14     }15     16     @catch ( CustomNSException *exception ) {17         NSLog(@"CustomNSException.name = %@" , CustomNSException.name);18         NSLog(@"CustomNSException.reason = %@" , CustomNSException.reason);19         20         // 弹出警告框,提示异常信息21         UIAlertView* alert = [[UIAlertView alloc] initWithTitle:CustomNSException.name22                                                         message:CustomNSException.reason23                                                        delegate:nil24                                               cancelButtonTitle:nil25                                               otherButtonTitles:nil];26         27         [alert show];28         [alert release];29     }30     31     @catch ( NSException *exception ) {32         NSLog(@"exception.name = %@" , exception.name);33         NSLog(@"exception.reason = %@" , exception.reason);34     }35     36     @finally {37         NSLog(@"@finally");38     }

@try

{

}

@catch

{

}

@finally

{

}

-》常用于下载数据(图片)本地配置显示。如果数据没有成功下载,则本地调用时可能出现异常。

@try {    _webImageOperation = [[SDWebImageManager sharedManager] downloadWithURL:[NSURL URLWithString:[self getSmallImageURL:imageURL]] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize){    } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) {            }];} @catch (NSException *e) {}

-》dealloc中也很常见

- (void)dealloc {    @try {        [[NSNotificationCenter defaultCenter] removeObserver:self];    }    @catch (NSException *exception) {        // do nothing, only unregistering self from notifications    }}

-》sqlite中插入数据

 *  @param transactionSql 多条sql语句数组 */-(void)execInsertTransactionSql:(NSArray *)transactionSql{    NSString *path = [self getPath];    if (sqlite3_open([path UTF8String], &database) == SQLITE_OK) {                //使用事务,提交插入sql语句        @try{            char *errorMsg;            if (sqlite3_exec(database, "BEGIN", NULL, NULL, &errorMsg)==SQLITE_OK)            {                DebugLog(@"启动事务成功");                sqlite3_free(errorMsg);                sqlite3_stmt *statement;                for (int i = 0; i<transactionSql.count; i++)                {                    if (sqlite3_prepare_v2(database,[[transactionSql objectAtIndex:i] UTF8String], -1, &statement,NULL)==SQLITE_OK)                    {                        if (sqlite3_step(statement)!=SQLITE_DONE) sqlite3_finalize(statement);                    }                }                if (sqlite3_exec(database, "COMMIT", NULL, NULL, &errorMsg)==SQLITE_OK)   DebugLog(@"提交事务成功");                sqlite3_free(errorMsg);            }            else sqlite3_free(errorMsg);        }        @catch(NSException *e)        {            char *errorMsg;            if (sqlite3_exec(database, "ROLLBACK", NULL, NULL, &errorMsg)==SQLITE_OK)  DebugLog(@"回滚事务成功");            sqlite3_free(errorMsg);        }        @finally{}    }}


0 0