iOS中GCD怎么取消?
你需要NSOperation,NSOperation天生支持Cancel,调用其cancel方法即可
想取消的时候,在block中 return 就可以了
return
GCD原生并不支持取消操作。dispatch_suspend函数也只能暂停开启新的未执行的block,已经处于执行中的block是无法暂停的。
但是,通过参考NSOperation的cancel机制,你只要加一个外边变量,用于标记block是否需要取消。然后block中通过及时的检测这个外部变量的状态,当发现需要取消时,停止block中的后续操作,释放资源。就能达到及时取消block的目的。这里有个例子:https://github.com/Tinghui/HUIGCDDispatchAsync
Block 一旦在 dispatch queue 中 submit,这个 block 就交给了 GCD 处理,我们就无法控制这个 block了。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(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了。