2

まず最初に、私の質問がダミーだと思われる場合に備えて申し訳ありません。私は iOS とマルチスレッドが初めてで、物事がどのように進んでいるかを理解したいだけです。私が知る限りdidEnterBackground、アプリが一時停止する前に iOS が呼び出す最後の関数であり、アプリがそこから戻るまでに約 5 秒かかります。それ以外の場合、iOS はアプリを強制終了します。私は現在、そのような状況について考えています-バックグラウンドスレッド(ネットワークダウンロードなど)で発生しているタスクがあり、その完了ブロックはメインスレッドで発生します。このような

fun downloadData() {
  Downloader.download(url: "someUrl") { [weak self] in // download is on the background thread
    DispatchQueue.main.async { [weak self] in // switch to main
      // do some stuff
    }
  }
}

downloadData()が現在バックグラウンド スレッドで実行されている場合、ユーザーがホーム ボタンをタップすると、アプリがバックグラウンドに移行してdidEnterBackground呼び出されます。メイン スレッドがコードを実行している間、didEnterBackground downloadDataダウンロードが完了し、その完了が呼び出され、新しいタスクがメイン スレッド キューにプッシュされます。では、この場合はどうなるでしょうか?のコードdidEnterBackgroundは中断前に実行できる最後のコードであるため、 の完了ブロックに何が起こるかは、downloadData中断の前 ( の後didEnterBackground) にも実行されるか、ユーザーがアプリに戻ったときに実行されるか、または廃棄されますか?または、この状況はまったくあり得ませんか? ご協力いただきありがとうございます。また、私の質問が間違っていたら申し訳ありません。

4

1 に答える 1