我有一张桌子,有 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 做了什么。