当我用nsurlconnection发送同步请求时
[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!");
}];
这个问题有解决办法吗?我在视图控制器中下载大文件如果视图控制器被解散,我想继续下载。问题是,如果我在下载大文件时一次接收所有数据,我将使用太多的内存。
NSURLConnection中唯一同步的方法是+ sendSynchronousRequest:returningResponse:error:
下面的方法都是异步的
+ connectionWithRequest:delegate:
– initWithRequest:delegate:
– initWithRequest:delegate:startImmediately:
+ sendAsynchronousRequest:queue:completionHandler:
– start
所以代码[NSURLConnection initWithRequest:myRequest delegate:self];
本身是异步的,你可以这样使用它。
或
你可以使用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 {
}