gpt4 book ai didi

ios - dispatch_async 处理事件

转载 作者:行者123 更新时间:2023-11-29 10:25:41 26 4
gpt4 key购买 nike

我知道 dispatch_async 可以处理线程。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{  
// handle things that takes a long time
dispatch_async(dispatch_get_main_queue(), ^{
// update UI
});
});

但是我怎样才能取消线程呢?

例如:

我有两个 View Controller - AViewController 和 BViewController,A-> 显示 B,以及一个关闭 B 的按钮。

我将在 BViewController 中执行 myMethod,我想在执行 myMethod 时关闭 B,所以我使用 dispatch_async,它确实从 B 到 A。但是在回到 AViewController 之后,音频出现了。

如何在关闭方法 exec 后立即停止 myMethod

- (void)myMethod {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// handles thing A
// play a audio
dispatch_async(dispatch_get_main_queue(), ^{
// update UI
});
});
}

最佳答案

为此您需要的不是 GCD 和 dispatch_async,而是 NSOperation。它是 GCD 的高级包装器,允许您引用异步操作、检查它们的状态、取消它们等。

我建议使用一个非常方便的名为 NSBlockOperation 的子类。你应该在你的类中保留对你的操作的引用,如果你需要取消它,只需调用 [self.myOperation cancel]

关于ios - dispatch_async 处理事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32431018/

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