NSURLConnection委托在iOS 5的主线程中调用

时间:2012-02-27 08:29:01

标签: iphone multithreading httpclient nsurlconnection nsurlconnectiondelegate

我正在升级我的iPhone应用程序,它具有使用Http通信的内容下载功能。 事件曾经发生在主线程中,而NSURLConnectionDelegate函数曾经在iOS 4的另一个线程中调用。 但是当我在iOS 5上测试相同的代码时,我发现在主线程中调用了NSURLConnectionDelegate函数。

我没有使用 NSURLConnection sendSynchronousRequest:,而是 initWithRequest:

Apple是否在iOS 5中升级了NSURLConnection的这一部分?

2 个答案:

答案 0 :(得分:0)

NSURLConnection在iOS 5中有一些新方法,例如sendAsynchronousRequest: ...,所以是的,他们以某种方式更新了它。

要修复它,您可以使用

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait

在您的委托方法中,或者只是在正确的队列上发送。

文档声明:

如果您之前未在运行循环或操作队列中安排连接 调用此方法时,连接将在当前运行循环中进行调度 默认模式。

你在-start你的连接是什么线程?

尝试将[connection startImmediately:YES]包裹在dispatch_async(myThreadQueue ...)来电。

答案 1 :(得分:-1)

如果将YES传递给startImmediately,则会在当前运行循环中调用委托方法。如果你从主线程执行此操作,那么这就是主运行循环。

但是,如果只是简单地传递NO并手动start请求,那么委托方法将在不同的线程(而不是主线程)上运行。