0

@try から @catch への遷移を理解するのに苦労しています

@try ブロックのステートメントが例外をスローすると、@catch ブロックが実行されることを理解しています。例外に関する情報を含む NSException オブジェクトが引数として渡される方法がわかりません。例外についてオンラインで読んでいる多くのことは、この詳細をスキップしています。

私の本の例は

@try {
    [myArray objectAtIndex: 2];
}

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

では、例外が検出されると、例外オブジェクトが自動的に作成されて @catch ブロックに送信されるのでしょうか?

4

2 に答える 2

0

例外処理には Try と Catch を使用します。try ブロックでエラーが発生するたびに、コンパイラは対応する Catch ブロックにジャンプし、それに Exception オブジェクトを渡します。エラーの詳細を知るために例外オブジェクトにアクセスするだけです。

于 2013-07-24T03:16:24.250 に答える
0

はい。エラーが発生すると、callstack によって生成されたスタック フレームがチェックされ、「catch」ブロックを含む「try」ステートメントがあるかどうかが確認されます。見つかった場合、実行コンテキスト (コールスタック、スレッド、エラーの詳細に関するコンテキストなど) を含む Exception オブジェクトがインスタンス化され、このオブジェクトがパラメータとして catch ブロックに渡されます。


ヒント: 目標 c で例外を再スローするためのベスト プラクティスを確認してください。C# では、再スロー操作によって例外のスコープが変更される可能性があることを知っています。

それが役に立てば幸い。

于 2013-07-24T03:16:47.867 に答える