1

NSURLConnection 的文档说NSURLConnection在单独的线程上运行,并且委托方法在启动连接的线程上调用。

我有多个NSURLConnection对象包含在我并行运行的“ URLDownload < NSURLConnectionDelegate > ”对象中。

在暂停我的程序(有时我在其中设置断点)并查看 Debug Navigator 时,我只看到一个com.apple.NSURLConnectionLoader线程。

以下是我认为这是如何工作的:

  1. 我创建了 5 个URLDownload对象(每个对象都有自己的NSURLConnection
  2. 创建了 5 个线程(每个NSURLConnection一个)
  3. 每个NSURLConnection在启动它们的线程上调用它的委托方法。

因此有 5 个线程(每个NSURLConnection一个),但它们的数据(didReceiveData...方法和其他)在单个线程上处理。

我做对了吗?

4

1 回答 1

1

异步 NSURLConnection 会在主线程上工作,这就是你需要知道的。

相对于网络连接的工作量而言,线程使用大量资源,因此 1 个异步 NSURLConnection 可能使用 1 个后台线程,2 个异步 NSURLConnections 可能使用 2 个后台线程,但 100 个异步 NSURLConnections 可能不会使用 100 个后台线程。

NSURLConnection 是一个黑匣子,可以为您管理最佳数量。这可能取决于您拥有多少个处理器、您的网络速度等(注意,我并不是说我知道它在后台是如何工作的,只是您不需要知道 - 它会做正确的事情。一个每个连接的线程将是一种非常可怕的方法)。

委托方法(didReceiveData 等)在启动连接的线程上被调用,因此这与在单个线程上调用它们不同。如果您在五个不同的线程上启动 5 个连接,您将在五个不同的线程上获得回调。

于 2012-09-28T16:17:21.663 回答