私は非同期性に頭を悩ませようとしています。ディスパッチ、複数のスレッド、実行ループなど。
違いは何ですか:
1)指定されたメソッドでNSURLRequestとNSURLConnectionを作成し、それを実行して、デリゲートメソッド(didReceiveResponse、didReceiveData、connectionDidFinishLoadingなど)に応答します。
2)ブロックを作成してdispatch_asyncにしますか?
最初のメソッドでは、デリゲートメソッドにアクセスできるのは素晴らしいようです(ディスパッチを使用しているメソッドにもアクセスできますか?)。デリゲートメソッドの実行は、起動されたとき(またはそれに近いときに実行されますか?)
ブロック/ディスパッチ方式では、ブロックはスレッド内で同期的に処理されると思いますか?そして、結果を処理するためにメインスレッドに戻りますか?私が見ているサンプルコード:
dispatch_async(kBgQueue, ^{
NSData* data = [NSData dataWithContentsOfURL:
kLatestKivaLoansURL];
[self performSelectorOnMainThread:@selector(fetchedData:)
withObject:data waitUntilDone:YES];
});
では、データを受信した後に「selfperformSelector ....」を実行しますか?(私が以前に同期的に意味したこと-おそらく間違った用語)。そして、ブロックの次の行は、メインスレッドに戻ります。
「waitUntilDone:YES」の目的は何ですか、またはなぜですか?それがない場合、メインスレッドではない他のことが起こる可能性があるためですか?
上記の最初の方法はまだメインスレッドでのみ実行されますか?
そして最後に、WebページへのJSONクエリの場合のそれぞれの長所と短所は何ですか?ある方法が他の方法よりも優れている点はありますか?