非同期通信に NSURLConnection を使用する場合、そのスレッドが同じ接続のデリゲート メソッドをポーリングするようにするには、インスタンス化されたスレッドに接続をその RunLoop にアタッチする必要があります。
メイン スレッドの RunLoop に依存せずに NSURLConnection を非同期的にインスタンス化する適切な方法は次のとおりです。
// Done within a Grand Central Dispatch block, or NSOperation.
// We do not start the connection here because we still need to attach the connection to the RunLoop of the current thread and handle how it will communicate responses back to the caller.
theConnection = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:NO];
// A previously instantiated NSOperationQueue for managing the delegate callbacks if-and-when they occur.
// [theConnection setDelegateQueue:delegateQueue];
/*
// Other NSURLConnection logic, etc.
*/
// We start the connection manually after properly establishing how it will poll and respond to events.
[theConnection start];
// This is for the RunLoop of the current thread. (Only needed for < iOS 6 compatibility)
// If this method is executed inside a GCD block or NSOperation, it will be the RunLoop of the thread run in-parallel to the Main Thread.
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:30.0]];
// From here, you can alter the time interval to coincide with a specific "time-out" event you'd like to occur.
「theConnection」は、タイプ「NSURLConnection」の現在のクラスのメンバー変数です。また、接続が応答を受信したら、デリゲート コールバックを管理するために NSOperationQueue メンバー変数を作成する必要があります。これらの呼び出しは、接続を実行しているスレッドに非同期で通信されます。
そこから、適切な NSURLConnection デリゲート メソッドを使用してデータを返すことができます。
スレッドに Grand Central Dispatch または Operation Queues を使用する利点は、Threading および RunLoop メカニズムが既に組み込まれていることです。内部に独自の RunLoop を持つ追加のスレッドを手動で割り当てる必要はありません。これにより、バックグラウンド スレッドを作成して非同期サーバー呼び出しを管理するという 2 段階の冗長性がなくなります。
アプリケーション用の真の非同期ネットワーク モデルを作成するための正しい道筋を示すには、これで十分だと思います。:)