原文地址iOS被開發者遺忘在角落的NSException-其實它很強大 - CocoaChina_讓移動開發更簡單
1.自定義expection
NSString*exceptionName =@"自定義異常";//異常的原因
NSString*exceptionReason =@"我長的太帥了,所以程式崩潰了";
NSDictionary*exceptionUserInfo =nil;
NSException*expection = [NSException exceptionWithName:exceptionNamereason:exceptionReasonuserInfo:exceptionUserInfo];
NSString*aboutMe =@"太好了";
if([aboutMeisEqualToString:@"太好了"]) {
@throwexpection;
}
出現的效果
2.在編寫程式碼實際可能應用到
1、 若自己封裝一套SDK,若要提示哪裡出錯,那麼就可以使用NSException。就像上面NSException的基本用法中的程式碼一樣。
2、可以用來捕獲異常,防止程式的崩潰。當你意識到某段程式碼可能存在崩潰的危險,那麼你就可以通過捕獲異常來防止程式的崩潰。
NSString *nilStr = nil;
NSMutableArray *arrayM = [NSMutableArray array];
@try {
//如果@try中的程式碼會導致程式崩潰,就會來到@catch
//將一個nil插入到可變陣列中,這行程式碼肯定有問題
[arrayM addObject:nilStr];
}
@catch (NSException *exception) {
//如果@try中的程式碼有問題(導致崩潰),就會來到@catch
//在這裡你可以進行相應的處理操作
//如果你要丟擲異常(讓程式崩潰),就寫上 @throw exception
}
@finally {
//@finally中的程式碼是一定會執行的
//你可以在這裡進行一些相應的操作
}
3.實際程式碼中的使用
3.1當出現異常的時候直接丟擲異常,說明異常的原因
- (void)addDataToArrayWithObject:(NSString*)object
{
@try{
[self.contentArrayaddObject:object];
}@catch(NSException *exception) {
NSString*exceptionName =@"自定義異常";//異常的原因
NSString*exceptionReason = [NSStringstringWithFormat:@"%@——%@",[self class],@"addDataToArrayWithObject方法中陣列新增的內容不能為空"];
NSDictionary*exceptionUserInfo =nil;
NSException*expection = [NSException exceptionWithName:exception Namereason:exceptionReason userInfo:exceptionUserInfo];
if(object ==nil) {
@throwexpection;// 此處丟擲異常提醒
}
}@finally{
}
}
3.2 出現異常,不丟擲異常,只是對錯誤的問題進行更改
- (void)addDataToArrayWithObject:(NSString*)object
{
@try{
[self.contentArrayaddObject:object];
}@catch(NSException *exception) {
if(object ==nil) {// 進行簡單的處理
[self.contentArray removeLastObject];
}
}@finally{
}
}
3.3在finally中可以放一些操作。這個方法是一定會執行的