1

NSURLConnectionのドキュメントには、NSURLConnectionは別のスレッドで実行され、デリゲートメソッドは接続を開始したスレッドで呼び出されると記載されています。

並行して実行する「 URLDownload<NSURLConnectionDelegate> 」オブジェクトでラップされたNSURLConnectionオブジェクトが複数あります。

プログラムを一時停止し(ある時点でブレークポイントを設定します)、Debug Navigatorを調べていると、com.apple.NSURLConnectionLoaderスレッドが1つしか表示されません。

これがどのように機能すると思うかです:

  1. 5つのURLDownloadオブジェクトを作成します(それぞれに独自のNSURLConnectionがあります)
  2. 5つのスレッドが作成されます( NSURLConnectionごとに1つ)
  3. NSURLConnectionは、それらを開始したスレッドでデリゲートメソッドを呼び出します。

したがって、5つのスレッド( NSURLConnectionごとに1つ)がありますが、それらのデータ(didReceiveData ...メソッドなど)は単一のスレッドで処理されます。

私はこれを正しく理解しましたか?

4

1 に答える 1

1

非同期NSURLConnectionは、メインスレッドで機能します。これで、知っておく必要があります。

スレッドはネットワーク接続の作業量に比べて多くのリソースを使用するため、1つの非同期NSURLConnectionは1つのバックグラウンドスレッドを使用し、2つの非同期NSURLConnectionsは2つのバックグラウンドスレッドを使用しますが、100の非同期NSURLConnectionsはおそらく100のバックグラウンドスレッドを使用しません。

NSURLConnectionは、最適な量を管理するブラックボックスです。これは、使用しているプロセッサの数、ネットワーク速度などに基づく可能性があります(NBは、内部でどのように機能するかを知っているとは言っていませんが、知る必要はありません。正しいことを実行します。1つ接続ごとのスレッドは、それを行うにはかなり恐ろしい方法です)。

デリゲートメソッド(didReceiveDataなど)は、接続を開始したスレッドで呼び出されるため、単一のスレッドで呼び出されると言うのと同じではありません。5つの異なるスレッドで5つの接続を開始すると、5つの異なるスレッドでコールバックを取得します。

于 2012-09-28T16:17:21.663 に答える