8

それぞれの動作の違いについては知っていますが、パフォーマンスの観点から知りたいです(iPhone内のリソース)。

非同期リクエストを送信し、デリゲートが呼び出されるのを待つとします。これは私の実行スレッドをロックしません。しかし、これを行うことと、GCDを使用して別のスレッドで同期要求を送信することとの違いは何ですか。

このような:

dispatch_queue_t findPicsQueue;

findPicsQueue = dispatch_queue_create("FindPicsQueue", NULL);


dispatch_async(findPicsQueue, ^{

    NSData *theResponse = [NSURLConnection sendSynchronousRequest:theRequest
                                                        returningResponse:&response
                                                                    error:&error];

    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;

    if (error) {
       NSLog(@"Error: %@",error)
    }

    if (httpResponse.statusCode == 200) 
    {
        [self parseXMLFile:theResponse]; // Parses Data and modifies picturesFound

        for (PictureData *tmp in picturesFound) {
            NSLog(@"%@",tmp);
        }          
    }  
}

メインスレッドで実行されていないため、インターフェイスはロックされませんが、この特定のスレッドはロックされます。また、GCDはキューを同時に実行すると思います。

前もって感謝します。私は本当にこの質問を明確にしたいです。

4

1 に答える 1

5

とともに使用するNSURLConnectionsendAsynchronousRequest、ほとんどすべての処理がメインスレッドで実行されます。特に、XML解析はメインスレッドで実行されます。ただし、コード例では、処理に別のスレッドを使用しています。

この違いは、2つのコアを備えたiPhoneまたはiPadプロセッサを使用している場合に関係します。次に、XML解析をメインスレッド(この例では)のUIアクティビティと並行して実行できます。したがって、メインスレッドですべてを実行するよりも早く完了することができます(sendAsynchronousRequestアプローチ)。

コアが1つしかない古いデバイスの場合、一度に実行されるスレッドは1つだけであり、2つのアプローチはほぼ同じように動作するはずです。

于 2012-08-10T05:41:32.577 に答える