5

私はアプリケーション内のブロックで多くの非同期実行を行います。どのように彼らはメインスレッドではないすべてのスレッドを殺すために?

しかし、特定のイベントがアプリケーションに表示される場合は、メインスレッドではないすべてのスレッドを強制終了する必要があります。

すべてのブロックの実行を停止することはできますか?または、他の言葉では、彼らは主なスレッドではないすべてのスレッドを殺す?

PS:私はNSOperationQueueの中でブロックを実行しようとしましたが、私の最初の操作は以下のような場合にはうまくいきません。

答えて

4

操作をキャンセルするためにスレッドを強制終了する必要がある場合は、間違っている可能性があります。 NSOperationQueueまたは類似のソリューション(ブロック内でのキャンセルロジックの実装など)は、IMHOの正しい方法です。操作キューに何らかの問題がある場合は、それを並べ替えてみてください。悪いものを作成して問題を回避してください。

+0

私のビューでは写真が表示され、サムネイルを読み込んで非同期で開始し、実際の写真を充電し、読み込まれるとサムネイルの代わりに表示されます。 しかし、ユーザーが重い写真をバックグラウンドで読み込んでいて、次の写真にスワイプすると、以前の重い写真はバックグラウンドで読み込み中であり、新しい写真が軽い場合は重い写真の読み込みが終了し、ビュー上に新しい写真が表示されます。そこで、私のコードでは、ユーザーが次の写真にスワイプすると、すべての背景スレッドを停止しようとしました。それが私の問題です。 –

+0

これは、スレッドを強制終了する必要のない古典的な使用例です。キャンセル可能なNSOperationとしてイメージロードを実装し、イメージが不要になったときにイメージのロードをキャンセルすることをお勧めします。 – zoul

関連する問題