iOS: GCD怎么取消

iOS中GCD怎么取消?

阅读 10.2k
4 个回答

你需要NSOperation,NSOperation天生支持Cancel,调用其cancel方法即可

想取消的时候,在block中 return 就可以了

GCD原生并不支持取消操作。
dispatch_suspend函数也只能暂停开启新的未执行的block,已经处于执行中的block是无法暂停的。

但是,通过参考NSOperation的cancel机制,你只要加一个外边变量,用于标记block是否需要取消。然后block中通过及时的检测这个外部变量的状态,当发现需要取消时,停止block中的后续操作,释放资源。就能达到及时取消block的目的。这里有个例子:https://github.com/Tinghui/HUIGCDDispatchAsync

Block 一旦在 dispatch queue 中 submit,这个 block 就交给了 GCD 处理,我们就无法控制这个 block了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏