之前的项目中有用到SDWebimage缓存图片,当图片只有一张的时候,无所谓,在回调的方法中直接调用即可,但是如果是多张图片的话,这个时候不知道哪个线程先完成,因为SDWebimage下载一张图片是开一个子线程,多张的话就多张子线程,如果我们需要在所有下载完成之后再进行回调,这个时候需要用到GCD中的Group知识点,会在所有的子线程完成之后给一个回调,这个时候就实现了之前的需求,步骤如下:
1:创建一个组 let group = dispatch_group_create(); 这样就创建了一个组,类似于lock的概念
2:将多个子线程加入进group中,
for url in status.storePicURLS!{
// 缓存图片 图片下载器
// 2将当前的下载操作添加到工作组中:
dispatch_group_enter(group);
SDWebImageManager.sharedManager().downloadImageWithURL(url, options: SDWebImageOptions(rawValue:0), progress: nil, completed: {(_,_,_,_,_)
in
print("缓存...");
3:线程完成后离开改组:
dispatch_group_leave(group);
})
}
}
4:所有的子线程都离开group后的回调,即是这个时候,所有的子线程操作已经完成,可以使用总的回调了
dispatch_group_notify(group, dispatch_get_main_queue()) {
print("缓存好了");
finished(models: models, error:nil);
}
这样就实现了利用group管理的功能