【问题标题】:Using NSURLConnection to make asynchronous requests serially使用 NSURLConnection 串行发出异步请求
【发布时间】:2012-01-16 15:27:37
【问题描述】:

我正在编写一个与 RESTful Web 服务交互的 iPhone 应用程序,我需要请求一个身份验证令牌以用于所有以后的请求。如果可能,我想避免多线程,而是使用异步 NSURLConnection 方法来确保主线程不会阻塞(从而确保用户界面保持响应)。

我遇到的问题是,我无法弄清楚如何在不让令牌获取同步请求并阻塞主线程的情况下让后面的请求等待令牌被获取。

我突然想到,我可以在一个循环中使用一个在令牌获取完成时设置的信号量值,但这似乎很笨拙,而且是错误的做法。是否有公认的正确方法?

【问题讨论】:

    标签: objective-c ios cocoa-touch asynchronous nsurlconnection


    【解决方案1】:

    如果您正在为 iOS 5.0 或更高版本构建,您可以使用:

    +[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]
    

    在completionHandler: 块中进行后续调用。

    【讨论】:

    • 这看起来可以,但如果可能的话,我更愿意保持 iOS 4.x 的兼容性。有没有办法用标准的委托调用来做到这一点?
    • 是的,您完全可以使用标准委托调用来做同样的事情。只需在初始 connectionDidFinishLoading: 调用内部/作为结果触发后续请求。
    【解决方案2】:

    您可能想查看MKNetworkKit。通过一些小的调整,您应该能够将其配置为冻结队列,直到令牌返回,此时您可以使用addHeaders: 修改队列中的现有操作以包含身份验证令牌。 “冻结”是 MKNK 的一大特色。即使您处于离线状态,它也允许您继续发出请求,并且一旦建立连接,它们就会被发送。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 2017-12-20
      相关资源
      最近更新 更多