异步NSUrlConnection不在主循环中

我正在创建一组与Web服务接口的类。 其核心是使用异步NSUrlConnection从服务中检索数据。 在我看来,重要的是它是异步的,因为这些Web服务接口的客户端必须能够取消正在进行的请求(即取消NSUrlConnection)。

Web服务调用会返回JSON数据,可能会有很多数据,这会被解析,我创建的类将创建适当的数据结构。 根据所调用的Web服务方法的不同,请求最终会变得非常昂贵 - 在主线程上运行的代价太高,所以我想要添加异步运行服务请求的选项,或者不给出选项,并强制异步调用。

异步调用都很好,但是我在启动NSUrlConnection的时候遇到了问题,这个调用不是主要的。 我所描述的问题似乎有相当详细的记录:我被引导认为NSUrlConnection的委托没有被调用,因为启动连接的runloop已经终止,因此返回委托的调用不能被调度到它的runloop 。

解决这个问题的最好方法是什么?

我曾尝试使用:

   while (!self.isRequestComplete && !self.isRequestCancelled)
        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
    }

从我已经完成的基本试验中,似乎可以正常工作,除非正在执行的runloop实际上是主要的runloop,对此我有几次崩溃...

选项是否会向客户端提供异步调用,如果使用该选项,则使用上述方法? 有没有更好的方法来实现我想要做的事情?

我打算实现的是一个类包,它允许与我的特定Web服务进行交互,在这里我的代码的客户端不需要担心他们自己的代理(我的类持有引用)是否会被调用线程。 我希望他们被称为完全相同的runloop,他们称我的代码 - 基本上,NSUrlConnection如何运作!

提前致谢! 缺口


我想你可能已经“上错了小河”这么说。 一般来说,除非你做的事情很奇怪,否则你不需要担心运行循环。 这听起来像你需要阅读多线程,尤其是Grand Central Dispatch。

链接地址: http://www.djcxy.com/p/30593.html

上一篇: Asynchronous NSUrlConnection not on main runloop

下一篇: Why does NSURLConnection timeout when sending many requests?