如何取消iOS背景中的所有NSURLConnection

时间:2013-02-22 07:08:56

标签: iphone ios objective-c

我正在使用NSURLCOnnections下载一些图像(约200-300个拇指图像)。我有这些图像的网址数组。连接开始下载这些图像。但在某些情况下,我想取消所有这些下载。怎么可能。我可以取消所有这些NSURLConnections。

3 个答案:

答案 0 :(得分:4)

创建NSOperationQueue并通过此队列使用NSURLConnection会更好。

例如:

NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(sendRequest)];


- (void) sendRequest {
    NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
    NSURLConnection *theConnection = [[[NSURLConnection alloc] initWithRequest:theRequest delegate:self] autorelease];
    ...
}

NSOperationQueue有方法cancelAllOperations

答案 1 :(得分:2)

[connection cancel]用于取消NSURLConnection。

答案 2 :(得分:0)

我会将同步NSURLConnectionNSOperationQueue结合使用来下载数据:

[queue addOperationWithBlock:^{
    NSData *data = [NSURLConnection
        sendSynchronousRequest:…
        returningResponse:… error:…];
}];

通过这种方式,您可以轻松控制并发下载的数量,并使用[queue cancelAllOperations]取消未完成的下载。请注意,取消队列不会停止已经开始的下载,但如果您只下载小缩略图并且具有合适的并发下载限制,这将不会成为问题。

同步NSURLConnection模式的优点是比异步委托API更容易使用。