dispatch_group的使用

2018-08-03  本文已影响6人  12345qwert

前言

使用dispatch_group过程中,如果发现以下问题:

使用场景

多个sevice并发执行,等获取到所有的数据后进行UI刷新。

使用方法

为了方便说明,约定如下:

注意点:

于是,代码大致是这样子的:

 - (void)fetchDataWithBlock:(ServiceCallBack)finishBlock {
        [service1 getData];
        [service2 getData];
        [service3 getData];
       
        dispatch_group_notify(_group, dispatch_get_main_queue(), ^{
            finishBlock(xxx);
        });
    }
- (Service *)service1{
    if (_service1 == nil) {
       _service1 = [[HYUserLevelService alloc] init];
        WEAKSELF
        _service1.serviceDidStartLoadBlock = ^(WeAppBasicService *service) {
            StrongSelf
            dispatch_group_enter(strongSelf.group);
        };
        _service1.serviceDidFinishLoadBlock = ^(WeAppBasicService *service) {
            STRONGSELF
            dispatch_group_leave(strongSelf.group);
        };
        _service1.serviceDidFailLoadBlock = ^(WeAppBasicService *service, NSError *error) {
            STRONGSELF
            NSString* errorMsg = [(KSAdapterService*)service message];
            EHLogError(@"err code = %@, err message = %@", [(KSAdapterService*)service code], errorMsg);
            dispatch_group_leave(strongSelf.group);
        };
    }
    return _service1;
}

代码说明

在实际使用中,fetchDataWithBlock:可能会被多次调用,而且前后两次调用的时间间隔很短。

上一篇下一篇

猜你喜欢

热点阅读