私はiPadアプリを開発していますが、現在はマルチスレッド化に最適なアプローチを見つけるのに苦労しています。
2つのサブビュー、ディレクトリピッカー、選択したディレクトリ内のすべての画像のサムネイルを含むギャラリーがあります。これらのサムネイルを「ダウンロード」して生成するにはかなりの時間がかかるので、マルチスレッドが必要になるため、ビューの相互作用と更新はブロックされません。Objective Cのベスト・マルチスレッド化アプローチ?
これは、私はすでに試したものです。[自己performSelectorInBackground:@selector(displayThumbnails :) withObject:currentFolder]
。
ユーザーの操作がブロックされなかったため、これは正常に機能しましたが、最初のフォルダがまだ読み込まれている間にユーザーが別のフォルダをタップすると失敗します。 2つのスレッドが同じビューと変数にアクセスしようとしているため、それぞれが適切に実行されています。ユーザーが別のフォルダをタップすると、現在ロード中のフォルダのdisplayThumbnails
が中止されます。私はこれを行うにはどのような方法を見つけることができませんでした。..
NSThreads
を私はこれを試みたが、第一の方法とほぼ同じ問題で苦労し、私はキャンセルする(簡単な)方法を見つけることができませんでした進行中の方法。 (はい、私は[aThread cancel]
について知っていますが、スレッドを「再開する」方法が見つかりませんでした)。多分私はNSThread
をサブクラス化し、私自身のisRunningなどのメソッドを実装する必要がありますか?しかし、私が見落としているより良い方法や3番目(あるいは4番目と5番目の)オプションはありませんか?
私はこれはかなり簡単な例だと思うし、おそらくより良い解決策がサブクラス化しないとNSThread
だと思います。だから、あなたは何をしますか?あなたの意見をしてください!
明らかに「GCD」としか読めない答えはありません – JustSid
あなたは完全に間違っています。真剣に。 – puzzle
[こちら](https://developer.apple.com/library/ios/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html%23//apple_ref/doc/uid/TP40008091-CH102-SW2)を参照してください。なぜGCDがとてもクールなのか:)さらに、WWDCセッションの1つをご覧ください:) オリジナルの問題について:スレッド、GCDまたはNSOperationQueueを使用しているかどうかにかかわらず、取り消しまたは一時停止のさまざまな方法があります。私はNSOperationQueueが合理的な実装に自動的にあなたを導くので、今すぐあなたのための良い解決策になると思います。 – puzzle