对数组中的对象执行块操作,并在完成时完成

我有一个对象的数组,我想执行块操作。 我不确定最好的方法来做到这一点。 我正在做类似下面的代码,但我不认为这是最好的做法。 做这种手术的最好方法是什么?

- (void)performBlockOnAllObjects:(NSArray*)objects completion:(void(^)(BOOL success))completionHandler { NSInteger counter = objects.count; for (MyObject *obj in objects) { [obj performTaskWithCompletion:^(NSError *error) { counter--; if (counter == 0) { completionHandler(YES); } }]; } } 

通常你会使用派遣组。 在您调用方法之前,您“进入”该组,在完成处理程序中“离开”,然后在组通知您所有“input”调用已被“离开”调用偏移时指定一个应被调用的块。

 - (void)performBlockOnAllObjects:(NSArray*)objects completion:(void(^)(BOOL success))completionHandler { dispatch_group_t group = dispatch_group_create(); for (MyObject *obj in objects) { dispatch_group_enter(group); [obj performTaskWithCompletion:^(NSError *error) { dispatch_group_leave(group); }]; } dispatch_group_notify(group, dispatch_get_main_queue(), ^{ completionHandler(YES); }); } 

当一系列其他asynchronous任务完成时,这是指定要asynchronous调用的代码块的典型模式。