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)执行完后才继续在主线程执行。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容