0

NSThread'sを使用detachNewThreadSelector:toTarget:withObject:すると、バックグラウンドプロセスの実行中にユーザーがアプリケーションを終了しようとすると、アプリケーションが正常に終了する前にスレッドが完全に実行を完了することがわかりました。

この場合、これは私が望む動作ですが、Appleのドキュメントには、これが常に当てはまることを示唆するものは何も見つかりませんでした。私が見つけた唯一の関連情報は、Appleのスレッドプログラミングガイドからの次のとおりです。

重要:アプリケーションの終了時に、切り離されたスレッドはすぐに終了できますが、結合可能なスレッドは終了できません。プロセスを終了する前に、参加可能な各スレッドを参加させる必要があります。したがって、データをディスクに保存するなど、スレッドが中断されるべきではない重要な作業を実行している場合は、結合可能なスレッドが望ましい場合があります。

このことから、切り離されたスレッドはアプリケーションの終了時に終了できることがわかりますが、自動的に終了することはありますか?または、アプリケーションが終了する前にスレッドが実行を完了すると常に想定しても安全ですか?

4

1 に答える 1

2

ドキュメントに関係なく、メインスレッドを含むすべてのスレッドが正常に実行を完了するとは限りません。

これは、ユーザーがいつでもアプリケーションを終了できる、システムの電源が切れたりパニックになったり、アプリがクラッシュしたりする可能性があるためです。

デタッチされたスレッドに関しては、メインイベントループがゴーストを放棄した後、システムフレームワークがタイムアウト後にアプリを自動的に強制的に終了することは前例のないことではありません。

于 2013-02-06T17:01:45.903 に答える