一、新建一个调度组 创建 全局队列 串型队列 并发队列 在全局队列中下载是因为优先级高
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t theGlobalQueue = dispatch_get_global_queue(0, 0);
dispatch_queue_t theSerialQueue = dispatch_queue_create("serial.queue", DISPATCH_QUEUE_SERIAL);
dispatch_queue_t theConQueue = dispatch_queue_create("concurrent.queue", DISPATCH_QUEUE_CONCURRENT);
//将任务丢进调度组
dispatch_group_async(group, theGlobalQueue, ^{
NSLog(@"task1 start--------");
[self downLoadFirstImage];
NSLog(@"task1 finished--------");
});
dispatch_group_async(group, theSerialQueue, ^{
NSLog(@"task2 start--------");
[self downLoadSecondImage];
NSLog(@"task2 finished--------");
});
dispatch_group_async(group, theSerialQueue, ^{
NSLog(@"task2 start--------");
[self downLoadThridImage];
NSLog(@"task2 finished--------");
});
dispatch_group_async(group, theSerialQueue, ^{
NSLog(@"task2 start--------");
[self downLoadFourImage];
NSLog(@"task2 finished--------");
});
dispatch_group_enter(group);
dispatch_group_async(group, theConQueue, ^{
NSLog(@"task3 start--------");
[self downLoadFifithImage];
NSLog(@"task3 finished--------");
dispatch_group_leave(group);
});
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
});
NSLog(@"dispatch_group_notify is async 😊");
}
通过异步线程可以避免在下载图片的时候页面卡顿
二、将下载的图片通过URL作为Key,图片作为value传给当前页面回到主线程进行UI刷新
- (void)downloadNotification:(NSNotification *)notification{
NSDictionary* objectInfo = notification.object;
NSLog(@"userInfo====%@",objectInfo);
if ([objectInfo objectForKey:self.downImageList[0]]) {
self.showUpLoadLogoImgPath = [NSString stringWithFormat:@"%@",[objectInfo objectForKey:self.downImageList[0]]];
}
if ([objectInfo objectForKey:self.downImageList[1]]) {
self.showUpLoadBusinessCertImgPath = [NSString stringWithFormat:@"%@",[objectInfo objectForKey:self.downImageList[1]]];
}
if ([objectInfo objectForKey:self.downImageList[2]]) {
self.showUpLoadContractImgPath = [NSString stringWithFormat:@"%@",[objectInfo objectForKey:self.downImageList[2]]];
}
if ([objectInfo objectForKey:self.downImageList[3]]) {
self.showUpLoadWorkCardImgPath = [NSString stringWithFormat:@"%@",[objectInfo objectForKey:self.downImageList[3]]];
}
if (self.showUpLoadLogoImgPath &&(self.showUpLoadBusinessCertImgPath || self.showUpLoadContractImgPath || self.showUpLoadWorkCardImgPath)) {
dispatch_main_thread(^{
[self.companyTableView reloadData];
});
}
}
三、对照片进行安全处理
@interface UIImage (AFNetworkingSafeImageLoading)
+ (UIImage *)af_safeImageWithData:(NSData *)data;
@end
static NSLock* imageLock = nil;
@implementation UIImage (AFNetworkingSafeImageLoading)
+ (UIImage *)af_safeImageWithData:(NSData *)data {
UIImage* image = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
imageLock = [[NSLock alloc] init];
});
[imageLock lock];
image = [UIImage imageWithData:data];
[imageLock unlock];
return image;
}
@end