dispatch_group_enter和dispatch_group_leave的使用
dispatch_group_enter和dispatch_group_leave的使用,这两个方法用于把一个异步任务加入group里。 首先,这两个一定要成对使用,不然会crash。 一般我们要把一个任务加入一个group里是这样: dispatch_group_async(group, queue, ^{ block(); }); 这个写法等价于 dispatch_async(queue, ^{ dispatch_group_enter(group); block() dispatch_group_leave(group); }); 如果要把一个异步任务加入group,这样就行不通了: dispatch_group_async(group, queue, ^{ [self performBlock:^(){ block(); }]; //未执行到block() group任务就已经完成了 }); 这时需要这样写: dispatch_group_enter(group); [self performBlock:^(){ block(); dispatch_group_leave(group); }]; 异步任务回调后才算这个group任务完成。 其实这跟retain/release差不多,都是计数,dispatch_group_enter时任务数+1,dispatch_group_leave时任务数-1,任务数为0时执行dispatch_group_notify的内容。