我有一个对象数组,我想在其上执行块操作.我不确定这样做的最好方法.我正在做类似下面的代码,但我不认为这是最好的做法.做这种手术的最佳方法是什么?
- (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); } }]; } }
Rob.. 6
通常,您可以使用调度组.在调用方法之前"输入"组,在"完成"处理程序中"离开",然后指定当组通知您所有"进入"调用已通过"离开"调用进行偏移时应调用的块.
- (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); }); }
这是指定在一系列其他异步任务完成时异步调用的代码块的典型模式.
通常,您可以使用调度组.在调用方法之前"输入"组,在"完成"处理程序中"离开",然后指定当组通知您所有"进入"调用已通过"离开"调用进行偏移时应调用的块.
- (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); }); }
这是指定在一系列其他异步任务完成时异步调用的代码块的典型模式.