如何使用GCD删除调度块

时间:2014-12-25 16:16:58

标签: macos cocoa automatic-ref-counting

我有这段代码:

_myQueue = dispatch_queue_create("com.myapp", DISPATCH_QUEUE_SERIAL);
            _mainQueue = dispatch_get_main_queue();

以及需要几秒钟(或几分钟)的大量此块

dispatch_async(_myQueue,
               ^{
                  if(canRun){ 
                    dispatch_async(_mainQueue,^{/* updating interface here */});
                    // code here
                  }
                });

我的应用有一个"停止"按钮尝试停止所有工作,BOOL" canRun"帮助我执行所有块,无需执行任何操作.....但总是必须等待每个块的完成,直到队列变为0。 有没有办法立即"清洁"队列不是这样做的吗? 目的是在不关闭和重新打开应用程序的情况下停止进程并重新开始。 该项目在ARC下运作。

1 个答案:

答案 0 :(得分:2)

如果您采取一些额外步骤来创建dispatch_source对象并保留对它的引用,则可以取消它们。

对初学者进行审核

https://developer.apple.com/library/mac/documentation/Performance/Reference/GCD_libdispatch_Ref/index.html

有暂停,恢复和取消的功能。