@try-@catch-@finally ブロックでは、finally を使用するのがよいのでしょうか、それとも通常どおりに続行するのがよいのでしょうか? 質問する

@try-@catch-@finally ブロックでは、finally を使用するのがよいのでしょうか、それとも通常どおりに続行するのがよいのでしょうか? 質問する

これは単純な 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?
}

関数の残りの部分は実行されますか、それとも@catchNSException が作成された場合にのみブロックされますか?

ベストアンサー1

「@finally ブロックには、例外がスローされるかどうかに関係なく実行する必要があるコードが含まれています。」Objective-C では、 return の後に finally のコードは実行されますか?

finally ブロックは、開いているソケット、開いているファイル、データベース ロック、セマフォ ロックなどのリソースを解放/クリーンアップするために存在します。

catch ブロック内でエラーが発生するか、catch ブロックが例外を再スローする場合、次の行が実行されます。

>>>The workflow will run this line in any case?

は実行されません。ただし、finally ブロック内のコードは実行される必要があります。finally ブロックは、クラッシュしそうなアプリケーションを正常に終了する最後の、最良の方法です。アプリケーションがクラッシュしそうにない場合でも、finally ブロック内のコードは、finally ブロック外のコードよりも予期しない状況で実行される可能性が高いため、リソースをクリーンアップするのに最適な場所です。

おすすめ記事