当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《对数组中的对象执行块操作,并在完成所有操作时完成》经验,为你挑选了1个好方法。

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

- (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);
    });
}

这是指定在一系列其他异步任务完成时异步调用的代码块的典型模式.



1> Rob..:

通常,您可以使用调度组.在调用方法之前"输入"组,在"完成"处理程序中"离开",然后指定当组通知您所有"进入"调用已通过"离开"调用进行偏移时应调用的块.

- (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);
    });
}

这是指定在一系列其他异步任务完成时异步调用的代码块的典型模式.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有