私は iPad アプリを開発していますが、現在、マルチスレッドへの最適なアプローチを見つけるのに苦労しています。簡単な例でこれを説明しましょう
。2 つのサブビュー、ディレクトリ ピッカー、および選択したディレクトリ内のすべての画像のサムネイルを含むギャラリーを含むビューがあります。これらのサムネイルの「ダウンロード」と生成にはかなりの時間がかかる可能性があるため、ビューの相互作用と更新がブロックされないようにマルチスレッドが必要です。
これは私がすでに試したことです:
[self performSelectorInBackground:@selector(displayThumbnails:) withObject:currentFolder];
ユーザーの操作がブロックされなかったため、これはうまくいきましたが、最初のフォルダーがまだロードされている間にユーザーが別のフォルダーをタップすると、悲惨なことに失敗します。2 つのスレッドが同じビューと変数にアクセスしようとしており、その結果、互いの適切な実行が台無しになります。ユーザーが別のフォルダをタップするdisplayThumbnails
と、現在ロードされているフォルダの が中止されます。これを行う方法が見つかりませんでした..
NSThreads
これを試してみましたが、最初の方法とほぼ同じ問題に苦労しました。進行中の方法をキャンセルする (簡単な) 方法が見つかりませんでした。(はい、知って[aThread cancel]
いますが、スレッドを「再開」する方法が見つかりませんでした)。たぶんNSThread
、独自の isRunning などのメソッドをサブクラス化して実装する必要がありますか? しかし、私が見落としているより良い方法や 3 番目 (または 4 番目と 5 番目) のオプションはありませんか?
これはかなり単純な例だと思いますNSThread
。それで、あなたは何をしますか?あなたの意見をお願いします!