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.name
22 message:CustomNSException.reason
23 delegate:nil
24 cancelButtonTitle:nil
25 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{}
}
}