過渡

2013-07-24 89 views
0

我有一個很難理解從過渡@嘗試@抓過渡

我明白,如果從@try塊一份聲明中拋出一個異常,@catch塊被執行。我不明白如何將包含有關該異常的信息的NSException對象作爲參數傳遞。很多我在網上閱讀的關於異常的東西都跳過了這個細節。

的例子,從我的書是

@try { 
    [myArray objectAtIndex: 2]; 
} 

@catch (NSException *exception){ 
    NSLog(@"Caught %@%@", exception.name, exception.reason); 
} 

所以一旦檢測到異常自動創建併發送到@catch塊一個例外對象?

+0

一旦異常被@catch塊捕獲,它由異常指針創建,並且名稱和原因是創建的異常的一部分 – user2277872

+0

所以一旦@catch塊捕獲異常,就會創建一個指針引用那個異常? – Brosef

+0

。 NSException將它創建爲指向異常的指針,並將指針設置爲任何類型的異常。 NSException有一些通用的異常,然後NSException有能力爲泛型不起作用的那些創建新的異常。 – user2277872

回答

0

Try和Catch用於異常處理。只要try塊中發生錯誤,編譯器就會跳轉到相應的Catch塊並將Exception對象傳遞給它。 我們只需訪問異常對象即可知道錯誤的詳細信息。

0

是的。發生錯誤時,將檢查由調用堆棧生成的stack frames以驗證是否存在帶'catch'塊的'try'語句。當它發現時,一個Exception對象被實例化爲包含執行上下文(例如關於callstack的上下文,線程和關於錯誤的細節),並且該對象作爲參數傳遞給catch塊。


提示:驗證在objective-c中重新引發異常的最佳做法。在C#中,我知道重投操作can change scope of the exception

希望它有幫助。