0

私はちょうどNSURLConnectionで非同期的な要求がどのように正確に機能するかについて疑問に思っています。NSURLConnectionを使用してスレッドセーフを検討する必要がありますか? - iOS

たとえば、アプリケーションで複数のアップロードプロセスが実行されており、すべてNSURLConnectionの異なるインスタンスを使用して初期化されているとします。プロセスをアップロードすると、あなたのラッパーオブジェクトは次のように、と呼ばれるNSURLConnectionのデリゲートメソッドを取得:

-(void)connectionDidFinishLoading:(NSURLConnection*)connection; 

をすべてNSURLConnectionのラッパーオブジェクトで、アレイ内のすべてのアクティブなアップロードのリストを持って、同じデリゲートオブジェクトを共有し、そのことを仮定connectionDidFinishLoadingがすべての接続に対して呼び出されると、共有デリゲートオブジェクトのそのリストから削除されます。

これらの接続オブジェクトが同じ配列にアクセスできる場合、スレッドの安全性について心配する必要がありますか?あるいは、これらのデリゲートメソッドはすべて、メインスレッドに戻って、スレッドセーフについて心配しないようにしますか?

答えて

2

トリックは、NSURLConnectionを作成したスレッドでデリゲートメソッドが呼び出されるということです。NSURLConnectionを特別に変更しない限り、スレッドはメインスレッドになります。 OSは、スレッド化キューイングAPIの1つを使用して、各接続が終了する順序でそのスレッド上でデリゲートメソッドを何度も呼び出す。

NSURLConnectionを使用すると、実際にスレッド化する必要のある転送のみが行われます。転送がメインスレッドで行われた場合、転送中にユーザーはあなたのiOSアプリケーションと対話できなくなります。結果を処理するのに比較的時間がかかりますが、処理をバックグラウンドで(別のスレッド上で)実行するかどうかには時間がかかりますが、それはあなた次第です。

+0

Aaaaaaaah that's interesting :)私は、複数のビデオ/オーディオファイルを同時にサーバにアップロードすることができるアプリケーションを作っているということです。このためにNSURLConnectionの非同期メソッドを使用します。基本的に、スレッドキューイングAPIでは、基本的にバックグラウンドのNSURLConnectionスレッドからのすべての呼び出しが順次呼び出されるようにしていますか?開発者はスレッドセーフについて心配する必要はありませんか?私は方法として答えとしてこのポストをマークします:)ちょうど私が正しくそれを最初に理解することを確認したい。 – CodingBeagle

+0

そうです。あなた自身も同様のことをやりたければ、おそらくGrand Central Dispatchを使いたいでしょう。ディスパッチキューを調べると、いくつかの例を見てすぐに使いやすいものになります。 – jackslash

+0

ああ!グレート:)お返事ありがとう! – CodingBeagle

関連する問題