0

異なるスレッドでサーバーにサーバー リクエストを送信しています。ロードが完了すると、tableView を更新するデリゲート コールバックを取得します。最初に、いくつかの奇妙な動作に気付きました。それは、一部の UI 要素がメイン スレッドで実行されていないことが原因である可能性があると考えました。

以下のコードを追加して問題を解決しましたが、iOS 4 デバイスでコードがクラッシュしました (DISPATCH_QUEUE_PRIORITY_BACKGROUND は iOS 4 と互換性がないことが判明しました)。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0), ^(void) {
  dispatch_async(dispatch_get_main_queue(), ^(void) {
    //Update view code etc...
  });
});

最初の を削除してdispatch_asynccall のみを呼び出すdispatch_get_main_queueと、コードは正常に実行されます。

dispatch_async(dispatch_get_main_queue(), ^(void) {
  //Update view code etc...
});

アップデートを Apple に送信する前に、これを行ってもよいかどうか尋ねたかったのです。コードは iOS 4 デバイスで正しく実行されますか?

前もって感謝します。

4

1 に答える 1

2

DISPATCH_QUEUE_PRIORITY_BACKGROUNDiOS 5以降でのみ利用可能

アップルのドキュメントから

DISPATCH_QUEUE_PRIORITY_BACKGROUND キューにディスパッチされたアイテムは、バックグラウンド優先で実行されます。すべての優先度の高いキューがスケジュールされた後で、キューの実行がスケジュールされ、システムは優先度がバックグラウンド ステータスに設定されているスレッドでアイテムを実行します。このようなスレッドの優先度は最も低く、ディスク I/O はシステムへの影響を最小限に抑えるために調整されます。iOS 5.0 以降で利用できます。

したがって、iOS 4 用のアプリも配布することを考えている場合は、それを使用することはできません

ソースアップルドキュメント

ただし、を削除するDISPATCH_QUEUE_PRIORITY_BACKGROUNDと、現在のコードはメインの ui スレッドでのみ実行されるため、リモート リクエストを実行しているときに速度が低下する可能性があります。

于 2012-07-01T18:39:46.427 に答える