gpt4 book ai didi

ios - 带有背景循环的for循环,完成?

转载 作者:可可西里 更新时间:2023-11-01 00:53:23 27 4
gpt4 key购买 nike

我想用后台代码运行一个for循环,一旦它完成对每个项目的迭代就会发生一些事情。在没有后台代码的情况下执行此操作很简单,如下所示:

for aString: String in strings {
if string.utf8Length < 4 {
continue
}

//Some background stuff
}

//Something to do upon completion

但是在其中包含后台代码意味着在处理所有项目之前执行完成时要执行的代码。

for aString: String in strings {
if string.utf8Length < 4 {
continue
}

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)) {
//Some background stuff
}
}

//Something to do upon completion

我想知道是否可以这样做。

最佳答案

考虑使用调度组。这提供了一种机制,可以在分派(dispatch)的任务完成时通知您。因此,不要使用 dispatch_async,而是使用 dispatch_group_async:

let group = dispatch_group_create();

for aString: String in strings {
if aString.utf8Length >= 4 {
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)) {
//Some background stuff
}
}
}

dispatch_group_notify(group, dispatch_get_main_queue()) {
// whatever you want when everything is done
}

仅供引用,这里是相同想法的操作队列再现(尽管​​限制了并发操作的数量)。

let queue = NSOperationQueue()
queue.name = "String processing queue"
queue.maxConcurrentOperationCount = 12

let completionOperation = NSBlockOperation() {
// what I'll do when everything is done
}

for aString: String in strings {
if aString.utf8Length >= 4 {
let operation = NSBlockOperation() {
// some background stuff
}
completionOperation.addDependency(operation)
queue.addOperation(operation)
}
}

queue.addOperation(completionOperation)

关于ios - 带有背景循环的for循环,完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28649694/

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