0

このコードがメインスレッドのUIを更新しているかどうかを調べようとしています。このコードは、JSONフィードをダウンロードするために特別に作成したクラスに含まれています。データを取得した後、それを解析してUIの更新に使用する配列を返し、データの準備ができたことをデリゲートに通知します。ビューコントローラである私のデリゲートは、この配列を使用してUIを更新します。ブロック-parser:didFinishParsingWithResults:で行う必要がありますか?dispatch_get_main_queueまたは、このクラスではなくView ControllerクラスでUIを更新しているので、これは必要ありませんか?ありがとうございました!

__block NSArray *results;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSData *responseData = [NSData dataWithContentsOfURL:url];
    results = [self parseData:responseData];
    [self.delegate parser:self didFinishParsingWithResults:results];
});
4

2 に答える 2

3
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)

それはメインスレッドではありません。これはデフォルトの優先度のグローバルキューであり、任意のスレッドである可能性があります。

parser:didFinishParsingWithResults:メインキュー/スレッドにディスパッチせずにUI要素をディドルすると、問題が発生します。

于 2012-08-05T05:27:38.977 に答える
2

間違いなくdispatch_get_main_queue()UIを更新するために使用します。そのコードはスレッドセーフではないため、常にメインスレッドでUIを更新する必要があります。私はこれを難しい方法で学びました:-)

于 2012-08-05T05:28:26.803 に答える