5

iOS 5の場合のみ、私が作業しているアプリケーションは、多数のリクエストを非同期で送信するとリクエストをドロップするようです。大きな意味はまだかなり小さい-今30でテスト

各リクエストは独自のNSURLConnectionを使用し、比較的迅速に戻ることが期待されます(つまり、300ミリ秒-2秒)。また、1つの接続を長期間開いたままにします。

5つおきの接続がデバイスからの離脱に失敗しているようです。確かにサーバーに到達することはなく、Charlesを使用したネットワークデバッグでは、要求が送信されることすら表示されません。

開いているNSURLConnectionオブジェクトとアクティブなリクエストの同時数の制限を知っている人はいないでしょうか。

iOS 4ではこの問題が発生しないことは注目に値します。また、長寿命の接続を切断した場合、5番目ごとのリクエストをドロップしなくなるようです。

4

1 に答える 1

4

NSOperationQueueこの問題を管理する最善の方法です。簡単に言うと、 を でラップNSURLConnectionNSBlockOperationてから、キューに追加します。キューを使用すると、同時接続の最大数などのさまざまなプロパティを設定できます。また、キューに入れられた操作を簡単にキャンセルする方法も提供します。

「Building Concurrent User Interfaces on iOS」と呼ばれる WWDC ビデオ (2012) には、このデザイン パターンの優れた紹介があります。

iOS 5 では、次の呼び出しを使用して を開始し、NSURLConnectionそれをNSOperationQueue

+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler

于 2012-09-12T20:50:13.717 に答える