0

私は、誰かが複数のUI要素を非同期でどのように読み込むのだろうと思っていました。私の場合、UIViewControllerにはUISegmentControlがあります。各セグメントには異なるUIアスペクトが読み込まれます。例えばseg1について
私はUIViewControllerを示す前に、すべてのUI要素をロードする場合、顕著な遅れがある等一つの画像、seg2番組や画像とテキスト、即座に非同期に複数のビューをロードする

を示しています。ですから、私はseg2...nを非同期的にロードして、UIの応答性を高めたいと考えています。

は、私は、バックグラウンドでロードする各segについて

DispatchQueue.main.async { 
    // load UI 
} 

を経由して、すべてをロードする必要がありますか?または、これらの要素を別のスレッドにロードして、メインスレッドを使用しないでください。あなたはバックグラウンドスレッドのUIを更新するはずではないことは知っています...しかし、非同期コードを使用するとメインスレッドを使用してUIをブロックしますか?

+0

"DispatchQueue.main.asyn"を呼び出すだけで、そのクロージャーがキューの最後まで整列されます。長い実行中/不定長の操作がある場合でも、GUIはブロックされます。あなたは単にそれを行うのに数ミリ秒も待っています。 余分な時間の真の原因であるさまざまなリソースをバックグラウンドスレッドで処理することはできませんか? QOS(サービス品質を高く評価する)を設定してみてください。 – BonanzaDriver

+0

ああそうです。プロファイラを使用して実際に何が時間がかかるかを確認し、バックグラウンドで実行しますか? – uti0mnia

答えて

0

バックグラウンドスレッドでUIを変更することはできません。ほぼすべてのUIKit呼び出しは、メインスレッドで行う必要があります。したがって、運が悪い可能性があります。

代わりに、バックグラウンドスレッドで時間のかかる数値処理(データのダウンロードや解析など)を行ってから、DispatchQueue.main.async()を使用してメインスレッドのビューにデータをインストールします一度時間のかかる作業が完了すると

遅れを導入しているUIの設定で、速度を上げることができない場合は、運が悪い可能性があります。

関連する問題