我正在尝试通过以下方法解决从Web服务接收大量数据的一般情况:
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
对于小数据,我只使用:
[webData appendData:data];
最后,在:
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
我使用输出流将其写入我的文件。
如果数据量巨大,只有几MB数据,那该怎么办?在这种情况下,最好将
connection:didReceiveData:
中的数据多次转储到同一文件中。使用NSFileHandle
听起来很容易,但是在考虑异步/非阻塞UI的同时进行读写同步并不容易(至少对我而言)。知道这个案例有什么好的方法吗?
我当时正在考虑使用
NSThread
,每次都对块大小进行排队。有没有更好/更简便的方法呢? 最佳答案
您知道,我实际上为此做了一个类(非ARC,但仍然可以使用)here
用法示例:
// in init
RJRStreamWriter myWriter = [[RJRStreamWriter alloc] initWithLocalFile:@"path/to/my/file" andAppend:NO];
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
static dispatch_queue_t asyncQueue;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
asyncQueue = dispatch_queue_create("asyncQueue", NULL);
});
dispatch_async(asyncQueue, ^{
// this method is optimized, and aggregates NSOutputStream, NSMutableData, and NSFileHandle
[myWriter writeData:data];
});
}
关于objective-c - 将来自Web服务的大量数据分块写入文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8887326/