@try @catch @finally

學習筆記 比較基礎

基本概念

Try
Try

@try @catchObjective-C 異常捕捉機制

  * `@try`存放可能出現(xiàn)異常的代碼  -  發(fā)現(xiàn)異常
  * `@catch`異常處理邏輯  -  捕捉異常  && 處理異常
  * `@finally`回收資源  -- 執(zhí)行收尾

在我們編寫Objective-C程序時轩性,最好的編程實踐是指能預測程序中可能出現(xiàn)的問題良蒸。為此毡庆,你可以測試使程序異常終止的條件并處理這些情況洪添,可能要記錄一條消息并完全終止程序腊瑟,或者采取其他正確措施跳昼。以避免錯誤為例对嚼,在程序運行時執(zhí)行測試可以避免向?qū)ο蟀l(fā)送未識別的消息。當試圖發(fā)送這類未識別消息時杰标,程序通常會立即終止并拋出一個異常兵怯。___Objective-C中使用@try處理異常

測試總結

void(^_asect)(NSString *str) = ^(NSString *str){
    NSCAssert(NO, str);
};

static inline void catchexception(NSString *str){
    NSCAssert(NO, str);
}

    NSArray *arr = nil;
    @try {
        NSDictionary *dic =  @{arr:arr};
        NSLog( @"%@", dic);
    }@catch (NSString *exception) {
        NSLog(@"@exception11111");
        NSLog( @"異常:%@", exception);
    }@catch(NSException *exception){
    NSLog(@"@exception22222");
        catchexception(exception.reason);
    }@catch(NSException *exception){
        NSLog(@"@exception33333");
       _asect(exception.reason);
    }@finally {
        NSLog(@"@finally");
    }
        NSLog(@"@finally44444");

  • @try產(chǎn)生異常時
    會在之后的@catch中捕捉異常,如果異常類型和@catch的參數(shù)類型相符,就會執(zhí)行@catch中的代碼;如果異常類型和@catch的參數(shù)類型不相符,就會執(zhí)行后面的@catch知道異常類型匹配/如果類型都不匹配,所有@catch中的代碼都不會執(zhí)行;最后執(zhí)行@finally
    如果在執(zhí)行@catch和異常類型匹配,就會執(zhí)行@catch中的代碼;如果@catch中代碼也存在異常,異常之后的代碼不再執(zhí)行;最后執(zhí)行@finally
    多個@catch存在時 ,異常只會在首個&&異常匹配的@catch 中執(zhí)行, 之后的@catch不再執(zhí)行;最后執(zhí)行@finally
  • @try不產(chǎn)生異常時 只會執(zhí)行@try中的代碼和@finally中的代碼

  • @finally代碼塊一定執(zhí)行 如果@finally執(zhí)行代碼中出現(xiàn)異常, 異常之后的代碼不再執(zhí)行

  • @finally之外的代碼 在異常正常捕捉并且@catch和之后執(zhí)行的@finally中的執(zhí)行代碼不存在異常的情況下會執(zhí)行

  • @catch 和 @finally代碼塊執(zhí)行時出現(xiàn)的異常 這些異常會被返回給方法的調(diào)用者

補充_NSException

NSException 是 OC 中所有異常的父類
主要屬性

@property (readonly, copy) NSExceptionName name;
@property (nullable, readonly, copy) NSString *reason;
@property (nullable, readonly, copy) NSDictionary *userInfo;

  • @catch 代碼塊捕獲異常時查看 異常對象類型是否是 捕獲的異常類型 或者其子類, 一旦放在開頭, 后面的異常永遠不可能捕獲;
    eg:
  NSArray *arr = nil;
   @try {
       NSDictionary *dic =  @{arr:arr};
       NSLog( @"%@", dic);
   } @catch (NSException *exception) {//執(zhí)行
       NSLog( @"異常:%@", exception.name);
   }@catch(NSException *exception){//不執(zhí)行
       catchexception(exception.reason);
   }@catch(NSException *exception){//不執(zhí)行
      _asect(exception.reason);
   }@finally {
       NSLog(@"@finally");
   }

求知若饑 虛心若愚
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市腔剂,隨后出現(xiàn)的幾起案子媒区,更是在濱河造成了極大的恐慌,老刑警劉巖桶蝎,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驻仅,死亡現(xiàn)場離奇詭異,居然都是意外死亡登渣,警方通過查閱死者的電腦和手機噪服,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胜茧,“玉大人粘优,你說我怎么就攤上這事∩胪纾” “怎么了雹顺?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長廊遍。 經(jīng)常有香客問我嬉愧,道長,這世上最難降的妖魔是什么喉前? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任没酣,我火速辦了婚禮王财,結果婚禮上,老公的妹妹穿的比我還像新娘裕便。我一直安慰自己绒净,他們只是感情好,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布偿衰。 她就那樣靜靜地躺著挂疆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪下翎。 梳的紋絲不亂的頭發(fā)上缤言,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音漏设,去河邊找鬼墨闲。 笑死今妄,一個胖子當著我的面吹牛郑口,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盾鳞,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼犬性,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了腾仅?” 一聲冷哼從身側響起乒裆,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎推励,沒想到半個月后鹤耍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡验辞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年稿黄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片跌造。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡杆怕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出壳贪,到底是詐尸還是另有隱情陵珍,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布违施,位于F島的核電站互纯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏磕蒲。R本人自食惡果不足惜留潦,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一收苏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧愤兵,春花似錦鹿霸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至屹堰,卻和暖如春肛冶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扯键。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工睦袖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人荣刑。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓馅笙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親厉亏。 傳聞我的和親對象是個殘疾皇子董习,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容