我正在升级我的iPhone应用程序,它具有使用Http通信的内容下载功能。 事件曾经发生在主线程中,而NSURLConnectionDelegate函数曾经在iOS 4的另一个线程中调用。 但是当我在iOS 5上测试相同的代码时,我发现在主线程中调用了NSURLConnectionDelegate函数。
我没有使用 NSURLConnection sendSynchronousRequest:,而是 initWithRequest:。
Apple是否在iOS 5中升级了NSURLConnection的这一部分?
答案 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
请求,那么委托方法将在不同的线程(而不是主线程)上运行。