iPhoneの「公式」のようなフォトギャラリーを作成しています。 ALAsset(中央の1つ、左と右の1つ前のALAsset)から3つのUIImageViewsをロードし、サムネイルをロードしてからfullScreenImageをロードし、そのサムネイルを置き換えます。UIscrollviewでの写真の遅延読み込み
すべてがバックグラウンドで発生し、シリアルキューにはdispatch_asyncが含まれています。
私の問題は、ユーザーが写真をすばやくスクロールするときです。サムネイルのUIimageviewsを返さなければならない関数のように、以前の写真のfullScreenImageバージョンを読み込んでいる間にサムネイルを読み込もうとします。 ..戻りません、遅れが発生します。
dispatch_asyncで既に実行されているタスクをキャンセルして、サムネイルをロードする関数を最大限優先させることはできません。どうすればこの問題を解決できますか?
こんにちは、あなたのお返事ありがとうございます。私は既にさまざまな優先順位で試してみましたが、成功しませんでした。完全な写真の読み込みに低い優先度を割り当てても、サムネイル(高優先度)の新しい要求がエンキューされると、前のものが既に開始されているとブロックされていないようです。たぶん、ALAssetからのローディングには、強力なディスクアクティビティが含まれているのでしょうか?優先順位は、CPUの激しい作業には有効ですが、メモリからのロードは優先順位付けによって助けられません... – flip79
ブロックが既に実行されていると、それを先取りする方法がないため、優先度の高いキューの作業の中断優先度の低い作業の進行中 - キューの優先度は、次に実行される保留中の「作業」を決定するだけです。サムネイルのレンダリングの進行中にイメージのレンダリングを「バックオフ」にする内部フラグを設定すると、イメージレンダリングの作業を少しでも中断する必要があるようです。数百ミリ秒か何かのために寝ることによって。効率的ではありませんが、すべてのコードをリファクタリングするのに時間がかかります。 – jkh