1

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

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

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

4

2 回答 2

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 ...)电话包裹起来。

于 2012-02-27T08:34:19.470 回答
-1

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

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

于 2013-03-14T17:35:24.977 回答