如何使用NSURLConnection的sendAsynchronousRequest方法接收我的数据?

时间:2014-07-21 04:49:11

标签: ios asynchronous nsurlconnection nsurlconnectiondelegate

当我使用NSURLConncetion发送同步请求时

[NSURLConnection initWithRequest:myRequest delegate:self];

我可以使用以下方法将我下载的数据分成几部分

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

    [self.videoData appendData:data];
    NSLog(@"APPENDING DATA %@",data);

}

这样做的好处是我可以直接将数据写入文件,并在下载大文件时限制ram的使用。

当我发送异步请求时,如何分段接收数据?我看到给我的数据的唯一地方是请求的完成处理程序。

 [NSURLConnection sendAsynchronousRequest:videoRequest 
                                    queue:downloadQueue 
                        completionHandler:^(NSURLResponse* response, NSData* data, NSError* error){
        NSLog(@"All data is given here!");
    }];

这个问题有解决办法吗?我在视图控制器中下载大文件,并希望在视图控制器被解除时继续下载它们。问题是,如果我在下载大文件时立即收到所有数据,我将会使用太多内存。

1 个答案:

答案 0 :(得分:0)

NSURLConnection中唯一同步的方法是+ sendSynchronousRequest:returningResponse:error:

以下方法都是异步的

+ connectionWithRequest:delegate:
– initWithRequest:delegate:
– initWithRequest:delegate:startImmediately:
+ sendAsynchronousRequest:queue:completionHandler:
– start

因此代码[NSURLConnection initWithRequest:myRequest delegate:self];本身是异步的,您可以按原样使用它。

OR

您可以使用NSURLSession进行更多控制

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];

self.downloadTask = [self.session downloadTaskWithRequest:request];
[self.downloadTask resume];

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite {

}