NSURLConnection上的调用实例方法取消通常根本不会取消连接。如何取消异步NSURLConnection
我在NSOperation中执行异步NSURLConnection。如果操作被取消,则通过调用NSURLConnection上的取消来停止连接,然后将连接设置为nil。
是否有立即取消连接的方法?大多数情况下,它会继续在后台运行,直到请求完成,即使连接都被取消并设置为零。 NSOperation子类是在连接被取消之后处理的,其中连接被释放。即使在那之后,异步连接仍在继续运行!
是否有另一种方法取消它?或者它的线程可以取消吗?
下面的代码片段从我的NSOperation子类的主要方法:
// Create and start asynchronous connection
self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
[request release];
while(!isFinished) {
if(self.isCancelled) {
[self.connection cancel];
self.connection = nil;
[self uploadCanceledDelegate];
return;
}
// Special sleep because callbacks are executed on same thread as this loop
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
注:启用无线网络时,这种行为才会发生。使用3G/Edge/GPRS可以正常工作
感谢您的回复!目前我没有遇到任何泄漏或崩溃。 – Marcus 2010-09-11 12:28:48
看起来执行异步连接的线程正在被阻塞,直到它本身检查取消或已完成,并且没有什么可以处理它。而当它以高速(WiFi)传输较少量的数据(2mb)时,有时线程会到达终点,并且不检查它是否被取消。我现在将此标记为正确的答案。谢谢! – Marcus 2010-10-05 14:38:55