gpt4 book ai didi

ios - 如果我的 DispatchGroup 从未完成会发生什么

转载 作者:搜寻专家 更新时间:2023-11-01 06:00:40 24 4
gpt4 key购买 nike

我有很多异步任务需要全部完成才能继续,所以我使用的是 DispatchGroup。但是,我能够判断其中一项任务是否提前失败,并且我通常会调用完成处理程序。

如果我通过调用完成处理程序离开函数的范围,DispatchGroup 会发生什么情况?

内存是永久分配的吗?如果最终调用 leave 的次数足够多(可能是由于错误),是否仍然可以调用通知 block ?

例子:

func example(completion: @escaping (Bool) - Void) {
let group = DispatchGroup()

group.enter()
asyncFunction1 {
if result == false {
completion(false)
} else {
group.leave()
}
}

group.enter()
asyncFunction2 { result in
if result == true {
group.leave()
}
}

group.notify(queue: .main) {
completion(true)
}
}

在上面的示例中,我有两个异步函数。第一个函数可能调用 completion(false),而第二个函数仅在成功时调用 leave。虽然它可能不是最好的代码示例,但这些条件是可能的。通知 block 会发生什么?

最佳答案

来自 GCD 上的 swift 源代码: https://github.com/apple/swift-corelibs-libdispatch/blob/master/src/semaphore.c

似乎该 block 将被分配并且永远不会释放。这意味着, block 保留的内存也永远不会被释放。

关于ios - 如果我的 DispatchGroup 从未完成会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52362130/

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