我有一张桌子,有N行。每行都连接一个文件进行下载,所以我需要做一个音频文件的串行队列来下载。每行必须显示一个小图标,以显示该文件是在下载还是在等待行中。完全下载音频文件后,我使用NSNotifications更新UI,我只是传递下载下一行。 到目前为止,我想出了这个,它工作正常。
swpadq.queue = dispatch_queue_create("com.audioDownload", DISPATCH_QUEUE_SERIAL);
dispatch_async(_queue, ^{
NSURLRequest *urlRequest_ = [NSURLRequest requestWithURL:audioURL_
cachePolicy:NSURLRequestReloadIgnoringCacheData
timeoutInterval:60.0f];
NSError *error_;
NSLog(@"downloading %@", [audioURL_ absoluteString]);
NSData *data_ = nil;
data_ = [NSData dataWithContentsOfURL:audioURL_
options:NSDataReadingUncached
error:&error_];
/*data_ = [NSURLConnection sendSynchronousRequest:urlRequest_
returningResponse:nil
error:&error_];*/
});
唯一的“小”问题是内存在增长,保持缓存直到所有文件都被完全下载,此时此时内存被释放。我有数百个文件要下载,这是一个问题。我怎么解决这个问题?
而且,我如何释放或取消(我使用ARC)缓存,以便删除串行块在每个nsurlrequest上保留的强保留周期?当队列完成以释放所有对象(尤其是url缓存)时,我真的不明白GCD的作用。
答案 0 :(得分:0)
您是否需要序列队列?下载必须按特定顺序一个接一个地完成吗?如果没有,那么尝试使用并发队列。您可以按如下方式获取全局并发队列:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);