Objective c 异步NSUrlConnection不在主runloop上
我正在创建一组与web服务接口的类。其核心是使用异步NSUrlConnection从服务中检索数据。在我看来,异步是很重要的,因为这些web服务接口的客户端必须能够取消正在进行的请求(即取消NSUrlConnection) web服务调用返回JSON数据,可能会返回大量数据,这些数据会被解析,我正在创建的类将从中创建适当的数据结构。根据调用哪个web服务方法,请求可能会很昂贵—在主线程上运行太昂贵,因此我想添加异步运行服务请求的选项,或者不提供该选项,并强制异步调用 异步调用都很好,但我在非主运行循环上异步启动NSUrlConnection时遇到问题。我所描述的问题似乎有很好的文档记录:我被引导相信NSUrlConnection的委托没有被调用,因为启动连接的runloop已经终止,因此无法在其runloop上安排对委托的调用 解决这个问题的最好办法是什么 我试过使用:Objective c 异步NSUrlConnection不在主runloop上,objective-c,cocoa,asynchronous,nsurlconnection,Objective C,Cocoa,Asynchronous,Nsurlconnection,我正在创建一组与web服务接口的类。其核心是使用异步NSUrlConnection从服务中检索数据。在我看来,异步是很重要的,因为这些web服务接口的客户端必须能够取消正在进行的请求(即取消NSUrlConnection) web服务调用返回JSON数据,可能会返回大量数据,这些数据会被解析,我正在创建的类将从中创建适当的数据结构。根据调用哪个web服务方法,请求可能会很昂贵—在主线程上运行太昂贵,因此我想添加异步运行服务请求的选项,或者不提供该选项,并强制异步调用 异步调用都很好,但我在非主运
while (!self.isRequestComplete && !self.isRequestCancelled)
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
从我所做的基本测试来看,它似乎工作正常,除非正在执行此操作的runloop实际上是主runloop,为此我发生了一些崩溃
一个选项是向客户端提供异步调用,然后在使用该选项时使用上述方法吗?有没有更好的方法来实现我的目标
我的目标是实现一个类包,该包允许与我的特定web服务接口,其中我代码的客户端不需要担心它们自己的委托(我的类持有引用)是否会在不同的线程上被调用。我希望在调用我的代码的同一个运行循环中调用它们——基本上,就是NSUrlConnection的运行方式
提前谢谢!
尼克我想你可以说是“走错了路”。一般来说,你不需要担心运行循环,除非你正在做一些非常奇怪的事情。听起来您需要阅读一些关于多线程的内容,特别是Grand Central Dispatch。如果我使用并发NSO操作或使用GCD执行此操作,我会遇到同样的问题。我之所以担心运行循环,是因为对NSUrlConnection进行异步调用的任何异步调用都会在之后不久终止,因此NSUrlConnection无法在原始运行循环上调用我的委托。