これは単純な Objective-C の質問です。
@try
ワークフローは2つの方法で実行できます
- NSExceptionが発生した場合、コードはすぐに
@catch
ブロックにジャンプし、@finally
- そうでない場合は、ブロックの実行を終了して
@try
から実行します@finally
では、ブロックを使用する場合と使用しない場合の違いは何でしょうか@finally
? 以下のみを使用する場合:
-(void)function{
@try {
...
}
@catch (NSException *exception) {
...
}
>>>The workflow will run this line in any case?
}
関数の残りの部分は実行されますか、それとも@catch
NSException が作成された場合にのみブロックされますか?
ベストアンサー1
「@finally ブロックには、例外がスローされるかどうかに関係なく実行する必要があるコードが含まれています。」Objective-C では、 return の後に finally のコードは実行されますか?
finally ブロックは、開いているソケット、開いているファイル、データベース ロック、セマフォ ロックなどのリソースを解放/クリーンアップするために存在します。
catch ブロック内でエラーが発生するか、catch ブロックが例外を再スローする場合、次の行が実行されます。
>>>The workflow will run this line in any case?
は実行されません。ただし、finally ブロック内のコードは実行される必要があります。finally ブロックは、クラッシュしそうなアプリケーションを正常に終了する最後の、最良の方法です。アプリケーションがクラッシュしそうにない場合でも、finally ブロック内のコードは、finally ブロック外のコードよりも予期しない状況で実行される可能性が高いため、リソースをクリーンアップするのに最適な場所です。