gpt4 book ai didi

ios - 使用目标 : on a selector cancel internal method calls as well? 调用 cancelPreviousPerformRequests

转载 作者:行者123 更新时间:2023-11-28 19:50:45 26 4
gpt4 key购买 nike

我有一个选择器方法,它在使用 dispatch_async 调用的两个不同线程中的两个不同库中搜索特定文本。

现在这个选择器被绑定(bind)到一个文本字段,一旦一些字符发生变化,我们就可以查询库中的文本。

现在搜索需要一些时间,比如 0.3 - 0.4 秒,如果在输入另一个字符之前第一次搜索未完成,我想取消搜索并在文本字段中重新开始新字符。

那么在选择器上调用 cancelPreviousPerformRequestsWithTarget 是否会取消内部线程和库调用...?

最佳答案

没有。 cancelPreviousPerformRequestsWithTarget 与通过 GCD 分派(dispatch)的 block 无关(即 dispatch_async)。它取消了以前的调用使用 -performSelector:withObject:afterDelay: 在特定的 NSRunLoop 上安排选择器。此外,它不能取消那些已经在进行中的调用,如果它们仍在等待开始,它只能阻止它们开始。

无论使用何种方法 dispatch ,都无法(安全地)强制取消飞行操作。操作本身必须支持取消能力,通常是在其工作期间定期检查标志,如果标志表明操作应该取消,则提前返回。

因为不可避免地会有人说 NSOperation 支持取消,所以我现在不妨通过指出 NSOperation 的取消来阻止它支持仍然需要被取消的操作定期检查标志并有意提前返回,只是 NSOperation 具有提供标志的 cancelled 属性为你。为了使它对你有用,你的代码必须知道它是作为 NSOperation 的一部分执行的,并且它必须有一个指向特定 NSOperation 的指针 它作为其中的一部分执行,并且它仍然必须定期检查 NSOperationcancelled 属性并提前返回,以便“支持取消。”

在非垃圾收集运行时取消没有免费的午餐。

关于ios - 使用目标 : on a selector cancel internal method calls as well? 调用 cancelPreviousPerformRequests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29387404/

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