美文网首页
Dispatch小记

Dispatch小记

作者: VinZZZZ | 来源:发表于2018-04-09 13:30 被阅读3次
  1. DispatchQueue(label: "XXX")创建队列,label名相同并不能表示这两个队列是同一个队列,他们没有任何关系,加入其中的任务也不会有顺序依赖。label只是用于调试时方便查看的标记。

  2. 串行队列并不会只使用一个线程,它只关注于被加入的任务是顺次被取出执行的。如果是主队列,则会使用主线程;否则会选择合适的子线程执行该任务。

  3. 测试:

private func dispatchTest() {
        DispatchQueue.main.async {
            let queue = DispatchQueue(label: "com.abc.1") // (1)
            queue.async { // (2)
                sleep(10)
                print(Thread.current) // (3)
            }
            queue.sync {  // (4)
                print(Thread.current) // (5)
            }
            print(Thread.current) // (6)
        }
    }

首先(1)创建了一个串行队列queue; (2)中的block先加入了该队列;因为(2)为async,因此将会用一个另外的子线程来执行该block,并且当前线程继续执行至(4);因为是sync,(4)中的block被加入队列中,block内容会被当前的主线程执行;且(6)会在(5)执行完后才继续在主线程执行。

相关文章

网友评论

      本文标题:Dispatch小记

      本文链接:https://www.haomeiwen.com/subject/pxgbhftx.html