gpt4 book ai didi

objective-c - 处理在不同线程上调用 NSOperation completionBlock 这一事实的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-04 19:51:54 25 4
gpt4 key购买 nike

假设我们有 NSOperation A 和 NSOperation B。B 依赖于 A 完成并执行一些设置作为 A.completionBlock 被调用和完成的结果。这意味着 B.addDependency(A) 无法使用,因为在 A 完成之前无法构造 B。因此,我们选择在构造和启动 B 之前在单独的线程上使用 A.waitUntilFinished()

但是,因为 A 的 completionBlock 是在不同的线程上调用的,所以我们调用 A.waitUntilFinished() 的线程之前解除了阻塞A.completionBlock 已完成执行,因此在构建 B 时,必要的先决条件尚未完成。

因为苹果的 NSOperation API 不提供任何控制 A.completionBlock 被分派(dispatch)的地方,处理这个问题的通常方法是什么?

编辑:

到目前为止,我尝试过的选项是将 NSOperation B 包装在 NSBlockOperation C 中,然后调用 C.addDependency(A) 以便在 A 完成之前不构建 B。然而,这仍然没有解决问题,因为仍然必须在 NSBlockOperation C 中调用异步启动,并且完成 block 仍然飞到另一个线程。

最佳答案

既然你想要发生的是一旦模型 1 的 uuid 已知就让模型 2 保存,你能用那些术语表达它,让模型 2 观察模型 1 的 uuid(或使用通知)并启动操作 B一旦它有一个值集?

关于objective-c - 处理在不同线程上调用 NSOperation completionBlock 这一事实的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19788411/

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