ios - 在 NSOperation 子类 : sync or async pattern? 中发送多个请求

标签 ios asynchronous asihttprequest nsoperation synchronous

我在 SO 中进行了很多搜索,但我找不到我的问题的正确答案。
这里的问题:

我正在寻找在 NSOperation 中发送多个上传请求的正确机制。子类。特别是,此类在其main 中执行两个不同的操作。方法:

  • 首先它从本地数据库
  • 中检索数据
  • 然后它将组合数据发送到 Web 服务器

  • 因为,这两个操作可能需要一些时间来执行,所以我将它们包装在 NSOperation 中,如前所述。 .

    为了上传数据,我决定采用同步模式(我需要将我的应用程序与已成功提交到 Web 服务器的上传请求的数量同步)。

    为了执行类似的上传,我以如下同步方式使用 ASIHttpRequest。
    for (int i = 0; i < numberOfUploads; i++) {
    
        // 1-grab data here...
    
        // 2-send data here
        ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
        [request startSynchronous];
        NSError *error = [request error];
        if (!error) {
            int response = [request responseStatusCode];
            if(response == 200)
                uploads++;
        }
    }
    

    所以,我的问题是:
  • 这是将数据上传到 Web 服务器的有效解决方案吗?
  • 创建 ASIHTTPRequest *request 是否有效在后台线程中?
  • 我必须使用异步模式吗?如果是,怎么做?

  • 备注 我将 ASIHttpRequest 用于同步请求,但我认为 NSUrlConnection 可以应用相同的模式上课通过
    sendSynchronousRequest:returningResponse:error:
    

    先感谢您。

    最佳答案

    直接回答您的问题:

  • 是的,调用NSUrlConnection (在您的情况下,ASI 包装器)具有同步调用在 NSOperation 中有效.
  • 您可以创建NSUrlConnections在后台线程中,但这里有几件事要记住:

    如果在后台线程上使用它,则必须调用同步方法,或者必须自己保持线程处于事件状态。使用 asyncNSOperation在这里解释得很好:How do I do an Asychronous NSURLConnection inside an NSOperation?我已经使用了这种模式并且效果很好。
    NSUrlConnnection委托(delegate)回调回调到 NSUrlConnection 的线程。创建于。只是要记住的东西。
  • 您不必使用 async模式,但你可以。异步模式提供了更大的灵 active 。例如,如果您需要取消操作,您可以取消 NSUrlConnection请求 async图案。使用同步模式,你不得不让它运行(除非你明确地杀死线程)。

  • 注意:我会重新考虑使用 ASI,因为它不再受支持。 AFNetworking似乎是最受欢迎的替代品,虽然我选择开始使用 NSUrlConnection直接地。

    关于ios - 在 NSOperation 子类 : sync or async pattern? 中发送多个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9893149/

    相关文章:

    c# - 这两个异步实现之间的区别

    objective-c - 轮询网络以确定网络是否可访问?

    iphone - 如何使用 asihttprequest 接受自签名证书

    ios - CPTBarPlot - barTip 和 barBase 属性

    ios - 裁剪后在 ScrollView 上显示更新的图像

    javascript - 在调用 sendToDevice 之前,将 Promise.All 与 Firebase Cloud Fxs 结合使用,用 FCM token 填充数组

    c# - 绘制矩形 WP8.1 异步(或快速)

    iphone - ASIHTTP请求同步

    ios - 在启用垂直分页的 UIScrollView 中垂直滚动

    iphone - ZipKit 和 Xcode 4