IOS開發之--異常處理--使用try 和 catch 來捕獲錯誤。

一個搞java的老闆問我會不會try catch  我說不會 學這麼久也沒聽周圍朋友用這個 由於蘋果控制檯原本就能夠打印異常 java

特此研究一下。ios

1.try catch:  是捕獲異常代碼段   特色:對代碼的實時監控  佔用大量資源安全

2.ios中不多用到try 和catchspa

簡單的來講,Apple雖然同時提供了錯誤處理(NSError)和異常處理(exception)兩種機制,可是Apple更加提倡開發者使用NSError來處理程序運行中可恢復的錯誤。而異常被推薦用來處理不可恢復的錯誤。

緣由有幾個,在非gc狀況下,exception容易形成內存管理問題(文檔有描述即便是arc下,也不是安全的);exception使用block形成額外的開銷,效率較低等等,另外這也的確是Cocoa開發者的習慣。(http://blog.csdn.net/x32sky/article/details/23753597)//怪不得我沒聽周圍IOS開發人員用這個

3.try,catch,finally執行流程 (http://blog.csdn.net/phoenix001/article/details/4293472).net

try{
//1:拋出異常的代碼
//2:代碼
}catch(){
//3:代碼
//4:拋出異常
}finally{
//5:代碼
}
//6:代碼
首先要明確的一點是:無論try是否拋出異常,finally語句塊都會執行。
當心注意6!!

整個try,catch,finally執行有如下幾種狀況:

1:try語句塊沒有拋出異常。若是是這種狀況,程序會執行try,finally以及finally塊以後的代碼;

2:try語句塊拋出了異常而且catch有匹配的異常。當遇到try裏面拋出的異常後,try塊裏面剩下的代碼就不執行了,跳轉到catch塊裏面。

這裏又能夠分爲2種狀況。第一種,拋出的異常被後面的catch捕獲,而catch又沒有拋出新的異常,那麼執行順序是1356 ;第二種,若是catch裏面又拋出新的異常,順序是1345,而後將新的異常返回給方法調用者,6就不執行了 ;

3:try語句塊拋出了異常,可是後面的catch沒有能匹配的異常。那麼會執行try和finally裏面的語句也就是15,而後將該異常返回給方法調用者,不執行6 。
總結:
若是異常不能被捕捉的話,finally{}後面的語句就不會執行了,而finally{}必定被執行

 4.舉例使用code

@try{  
   
    }  
    @catch(NSException *exception) {  
        NSLog(@"exception:%@", exception);  
    }  
    @finally {  
          
    }  
相關文章
相關標籤/搜索