2017-06-25 6 views
0

ビューコントローラを表示したり、スグリでセグを実行した場合は、DispatchQueue.main.async {}でコールするか、それが問題です。私の問題は、私がバックグラウンドスレッドまたはメインスレッドで実行する必要があります。データベースからデータをロードする場合は、ビューをDispatchQueue.main.async {}に表示するか、バックグラウンドスレッドで実行する必要があります。メインスレッドで実行

答えて

0

メインスレッドに関するすべてのUI関連の移行、変更、および更新を呼び出す必要があります。しかし、どこでDispatchQueue.main.async {}を使うべきですか?

バックグラウンドスレッドから呼び出しを行う場合に使用します。たとえば、データをダウンロードしてAPIから解析する場合は、通常はバックグラウンドスレッドで行います。完了したら、UIの移行や更新が必要な場合があります。そのため、更新はメインスレッドで行われます。バックグラウンドスレッドである場合、UIの変更を行うにはDispatchQueue.main.async {}が必要です。

0

すべてのUI作業はメインスレッドで行われる必要があります。バックグラウンドキューにいなければ、メインキューにディスパッチする必要はありません。一般的な場合、セグは、主スレッド上に既に存在するユーザインタラクション(例えば、ボタン押下)からトリガされる。

表示されているビューのデータのロードに時間がかかる場合は、バックグラウンド・キューに非同期でディスパッチしてロードし、データのロードが完了したらメイン・キューに戻すことができます。

これは非同期なので、データのロードが完了した時点からのデータが表示されないことを意味します。これはあなたのUIで扱わなければならないものです。アプリケーションによっては、データがロードされている間にロードインジケータが表示される場合があります。もう1つは、最小量のデータをフェッチまたは渡して、大量のデータを非同期に表示およびロードすることです。

関連する問題