iOS中使用GCD中的Group管理子線程

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章