gpt4 book ai didi

iphone - 如何取消异步 NSURLConnection

转载 作者:行者123 更新时间:2023-12-03 19:16:11 27 4
gpt4 key购买 nike

在 NSURLConnection 上调用实例方法 cancel 通常根本不会取消连接。

我正在 NSOperation 中执行异步 NSURLConnection。如果取消操作,则通过调用 NSURLConnection 上的 cancel 来停止连接,然后将连接设置为 nil。

有没有办法立即取消连接?大多数情况下,即使连接被取消并设置为 nil,它也会继续在后台运行,直到请求完成。 NSOperation 子类在连接取消后被释放,即连接被释放。即使在那之后,异步连接仍然继续运行!

还有其他方法可以取消吗?或者可以取消其运行的线程吗?

这是我的 NSOperation 子类 main 方法的代码片段:

      // 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]];
}

注意:此行为仅在启用 WiFi 时发生。使用 3G/Edge/GPRS 可以正常工作

最佳答案

这可能是 Apple 文档的问题。

连接当前可能正在阻塞线程中等待,并且当该线程被阻塞时操作系统不会立即执行任何操作。线程不会真正被取消,直到它在稍后的某个时间点解除阻塞。因此,您不应该释放任何处理这些已取消连接的对象,直到将来某个未知的时刻,当线程正在等待的套接字超时或关闭时。

如果您遇到泄漏或崩溃,您可以尝试将“已取消”的操作对象移至另一个队列,等待几秒钟甚至几分钟后释放。

关于iphone - 如何取消异步 NSURLConnection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3684550/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com