我怎样才能得到我的数据块中使用NSURLConnection的的sendAsynchronousRe

2019-10-20 12:42发布

当我送与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!");
    }];

有没有办法解决这个问题? 我下载大文件的视图控制器,并希望如果视图控制器被驳回,继续下载它们。 问题是,我将使用过多的内存,如果我下载大文件时收到我的所有数据一次。

Answer 1:

在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 {

}


文章来源: How can I receive my data in pieces with using NSURLConnection's sendAsynchronousRequest method?