原文地址iOS被開發(fā)者遺忘在角落的NSException-其實(shí)它很強(qiáng)大 - CocoaChina_讓移動開發(fā)更簡單
1.自定義expection
NSString*exceptionName =@"自定義異常";//異常的原因
NSString*exceptionReason =@"我長的太帥了,所以程序崩潰了";
NSDictionary*exceptionUserInfo =nil;
NSException*expection = [NSException exceptionWithName:exceptionNamereason:exceptionReasonuserInfo:exceptionUserInfo];
NSString*aboutMe =@"太好了";
if([aboutMeisEqualToString:@"太好了"]) {
@throwexpection;
}
出現(xiàn)的效果
2.在編寫代碼實(shí)際可能應(yīng)用到
1、 若自己封裝一套SDK跟压,若要提示哪里出錯(cuò),那么就可以使用NSException辆它。就像上面NSException的基本用法中的代碼一樣榜晦。
2玲献、可以用來捕獲異常软舌,防止程序的崩潰才漆。當(dāng)你意識到某段代碼可能存在崩潰的危險(xiǎn),那么你就可以通過捕獲異常來防止程序的崩潰佛点。
NSString *nilStr = nil;
NSMutableArray?*arrayM?=?[NSMutableArray?array];
@try?{
//如果@try中的代碼會導(dǎo)致程序崩潰醇滥,就會來到@catch
//將一個(gè)nil插入到可變數(shù)組中,這行代碼肯定有問題
[arrayM?addObject:nilStr];
}
@catch?(NSException?*exception)?{
//如果@try中的代碼有問題(導(dǎo)致崩潰),就會來到@catch
//在這里你可以進(jìn)行相應(yīng)的處理操作
//如果你要拋出異常(讓程序崩潰),就寫上?@throw?exception
}
@finally?{
//@finally中的代碼是一定會執(zhí)行的
//你可以在這里進(jìn)行一些相應(yīng)的操作
}
3.實(shí)際代碼中的使用
3.1當(dāng)出現(xiàn)異常的時(shí)候直接拋出異常超营,說明異常的原因
- (void)addDataToArrayWithObject:(NSString*)object
{
@try{
[self.contentArrayaddObject:object];
}@catch(NSException *exception) {
NSString*exceptionName =@"自定義異常";//異常的原因
NSString*exceptionReason = [NSStringstringWithFormat:@"%@——%@",[self class],@"addDataToArrayWithObject方法中數(shù)組添加的內(nèi)容不能為空"];
NSDictionary*exceptionUserInfo =nil;
NSException*expection = [NSException exceptionWithName:exception Namereason:exceptionReason userInfo:exceptionUserInfo];
if(object ==nil) {
@throwexpection;// 此處拋出異常提醒
}
}@finally{
}
}
3.2 出現(xiàn)異常鸳玩,不拋出異常,只是對錯(cuò)誤的問題進(jìn)行更改
- (void)addDataToArrayWithObject:(NSString*)object
{
@try{
[self.contentArrayaddObject:object];
}@catch(NSException *exception) {
if(object ==nil) {// 進(jìn)行簡單的處理
[self.contentArray removeLastObject];
}
}@finally{
}
}
3.3在finally中可以放一些操作演闭。這個(gè)方法是一定會執(zhí)行的