私はGCD
を使用してHTTP
リクエストを非同期で送信しています。ここで動作しないコードは次のとおりです。GCD with NSURLConnection
dispatch_async(connectionQueue, ^{
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:someURL]]];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection start];//Not working
});
上記のコードはまったく機能しません。私はNSURLConnectionDelegateのメソッドでコールバックを取得していません。私は次のコードをしようとしたとき
はしかし、すべてが正常に働いていたと私はいくつかのいずれかがブロック/ GCDのこの奇妙な振る舞いを説明していただけます適切なコールバック
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:someURL]]];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
dispatch_async(connectionQueue, ^{
[connection start]; // working fine. But WHY ????
});
を得ましたか。
NSURLConnectionはすでに非同期データロードを行っていますが、なぜGCDを使用するのですか? Appleが推奨するのは –
ですか? GCDを使用してコードの上にロックを維持します。 – Ashu
2番目のサンプルは、dispatch_asyncブロックの前にすでに接続を開始しています。 "StartsImmediately"ブール値を "NO"に設定して接続をすぐに開始しないように指示しない場合、接続はインスタンス化されるとすぐに起動します。この場合、dispatch_asyncブロックは冗長です。非同期的にNSURLConnectionを使用する方法の例については、私の答えを参照してください。 – user298261