【发布时间】:2013-11-27 06:52:53
【问题描述】:
我正在下载多个这样的文件
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
HUD = [[MBProgressHUD alloc] initWithWindow:self.view.window];
HUD.labelText = @"Downloading";
HUD.mode = MBProgressHUDModeIndeterminate;
[self.view.window addSubview:HUD];
[HUD show:YES];
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0);
for (NSString *urlString in URLStrings) {
dispatch_group_async(group, queue, ^{
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]];
UIImage *image = [[UIImage alloc] initWithData:data];
[library writeImageToSavedPhotosAlbum:[image CGImage] orientation:(ALAssetOrientation)[image imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error) {
}];
});
}
dispatch_group_notify(group, queue, ^{
dispatch_async(dispatch_get_main_queue(), ^{
HUD.mode = MBProgressHUDModeText;
HUD.labelText = @"Success";
[self performSelector:@selector(hideHUDAndBack) withObject:Nil afterDelay:0.3];
});
});
dispatch_release(group);
当下载总大小为 20MB 或更大的文件时,它会收到内存警告并关闭。我尝试在没有 gcd 的情况下在主线程上运行它,但它仍然在最后收到内存警告并关闭。主要原因是什么以及如何解决?
【问题讨论】:
-
我尝试在循环中使用
autoreleasepool。它得到了改进,但仍然被关闭。
标签: ios objective-c grand-central-dispatch