gpt4 book ai didi

ios - For loop with ASync 然后等待它完成(Obj-C)

转载 作者:行者123 更新时间:2023-11-29 00:21:42 26 4
gpt4 key购买 nike

假设我有以下代码

-(void)doSomething{
[self expensiveMethod];
[self otherMethod]; //Depends on above method to have finished
}

-(void)expensiveMethod{
for(int i = 0; i<[someArray count]; i++{
[self costlyOperation:someArray[i]];
}
}

理想情况下,我希望[self coSTLyOperation] 分离出其他线程,以便每个线程都尽可能地并行完成(当然我知道这不太可能)。一旦对每个数组对象完成了 [self coSTLyOperation],我希望它返回,以便 [self otherMethod 可以利用处理过程。

最佳答案

您可以使用默认队列在后台使用调度异步运行任务。

编辑

您可以将异步任务分组以进行并行异步执行。您可能需要根据您的要求稍微调整一下。

-(void)doSomething{
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
//Background Thread
[self expensiveMethod:^{
dispatch_async(dispatch_get_main_queue(), ^(void){
//Run UI Updates
[self otherMethod]; //Depends on above method to have finished
});
}];
});
}

-(void)expensiveMethod:(void (^)(void))callbackBlock {

dispatch_group_t group = dispatch_group_create();

for(int i = 0; i<[someArray count]; i++) {
__block int index = i;
dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {
[self costlyOperation:someArray[index]];
});
}

dispatch_group_notify(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {
if (callbackBlock) {
callbackBlock();
}
});
}

关于ios - For loop with ASync 然后等待它完成(Obj-C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44060626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com