之前的項目中有用到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管理的功能