Dispatch小记

  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小记)