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管理的功能

你可能感兴趣的:(iOS开发总结)