【问题标题】:Does NSURLConnection block the main thread?NSURLConnection 会阻塞主线程吗?
【发布时间】:2010-07-29 15:10:46
【问题描述】:

我在 iPhone 应用程序中使用NSURLConnection,在将initWithRequest: 发送到我的NSURLConnection 实例后,界面似乎变慢了。我不确定这是因为我的处理代码需要很长时间来处理响应,还是因为NSURLConnection 阻塞了主线程。

谁能确认NSURLConnection 将在单独的线程上创建连接并等待数据,然后在主线程上调用其委托方法?

谢谢!

【问题讨论】:

    标签: iphone multithreading nsurlconnection


    【解决方案1】:

    NSURLConnection 支持两种操作模式:异步和同步。根本不使用单独的线程。它们都只使用一个线程,即您运行它们的任何线程。

    在同步模式下,NSURLConnection 将阻塞你在其中运行它的任何线程。异步模式使用运行循环的行为(从开发人员的角度来看)类似于后台线程,但开销较低且没有任何线程安全问题。如果使用异步模式,您希望在主线程中运行它。它不会阻止任何东西。

    如果您的界面变慢,这与同步使用 NSURLConnection 不一致,反而会导致您的界面完全停止,直到请求完成。

    【讨论】:

    • 你需要小心最后一句话!例如,如果您有 5000 个小请求,那么用户体验可能是界面变慢了(因为有很多小停顿),这是我最近遇到的
    • 异步使用 NSURLConnection 会创建一个线程,一个内部线程。这就是异步的定义。
    【解决方案2】:

    如果您在NSURLConnection 上遵循苹果示例,则调用将在与主线程不同的线程中处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多