美文网首页
swift GCD常用方法(转载)

swift GCD常用方法(转载)

作者: 缘之空_bb11 | 来源:发表于2024-04-21 10:31 被阅读0次

GCD的基本使用

    let serialQueue = DispatchQueue(label: "queue")//表示串行队列
    let concurrentQueue = DispatchQueue(label: "queue1", attributes: .concurrent)//表示并发队列
    
    let mainQueue = DispatchQueue.main//主队列
    let globalQueue = DispatchQueue.global()//全局并发队列

同步任务+串行队列

(没有开启新线程,串行执行任务,当前线程(主线程)中运行)

 let queue1 = DispatchQueue(label: "queue")
 print("begin")
 queue1.sync {
     print("线程1运行")
 }
 queue1.sync {
     print("线程2运行")
 }
 print("end")
 /*
  begin
  线程1运行
  线程2运行
  end
  */

同步任务+并发队列

(没有开启新线程,串行执行任务,当前线程(主线程)中运行)

   let queue2 = DispatchQueue(label: "queue1", attributes: .concurrent)
   print("begin")
   queue2.sync {
       print("线程1运行")
   }
   queue2.sync {
       print("线程2运行")
   }
   print("end")
   /*
    begin
    线程1运行
    线程2运行
    end
    */

异步任务+串行队列

(开启1条新线程,串行执行任务,开启1条新线程中运行)

    let queue3 = DispatchQueue(label: "queue")
    print("begin")
    queue3.async {
        print("线程1运行")
    }
    queue3.async {
        print("线程2运行")
    }
    print("end")
    /*
     begin
     end
     线程1运行
     线程2运行
     */

异步任务+并发队列

(开启2条新线程,并发执行任务,2条新线程中运行)

    let queue4 = DispatchQueue(label: "queue1", attributes: .concurrent)
    print("begin")
    queue4.async {
        print("线程1运行")
    }
    queue4.async {
        print("线程2运行")
    }
    print("end")
    /*
     begin
     end
     线程1运行
     线程2运行
     */

项目中用到的

    //1.延迟执行
    //DispatchTime.now() 获取当前时间
    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3) {
        //需要进行的操作
    }
    //2.异步进行耗时操作,主线程进行用户交互以及刷新UI的操作
    //开启一个全局的异步队列
    DispatchQueue.global().async {
        //耗时操作
        DispatchQueue.main.async {
            //进行UI刷新和用户交互
        }
    }
    //3.处理多数据请求,所有请求完毕进行UI更新
    //创建工作组
    let workingGroup = DispatchGroup()

    //创建队列
    let workingQueue = DispatchQueue(label: "requestData", attributes: .concurrent)

    //第一个网络请求
    workingGroup.enter()
    workingQueue.async {
        //进行数据请求1
        workingGroup.leave()
    }
    //第二个网络请求
    workingGroup.enter()
    workingQueue.async {
        //进行数据请求2
        workingGroup.leave()
    }
    //请求完毕
    workingGroup.notify(queue: .main) {
        //进行UI的更新
    }

相关文章

  • Swift 3.0 GCD的常用方法

    Swift 3.0 GCD常用的方法 导语: 随着最近苹果推出Swift 3.0 觉得不能把Swift丢下了,就赶...

  • 【iOS】Swift4.0 GCD的使用笔记

    前言 在Swift4.0版本中GCD的常用方法还是有比较大的改动,这里做个简单的整理汇总。 GCD的队列 队列是一...

  • swift -- 基础(4)字符串

    字符串常用方法 swift常用的方法

  • GCD (Grand Central Dispatch)学习详解

    iOS开发多线程处理常用GCD,相比NSThread和NSOperation更简单 便捷 易懂。Swift语法中对...

  • Swift-GCD

    对原Swift-GCD升级 SwiftGCD Swift-GCD Package GCDGroup, GCDQue...

  • GCD常用方法

  • GCD常用方法

    本文主要介绍GCD一些API的使用,也就是注重实站! 一、GCD常用API1.并发队列2.串行队列3.设置自定义队...

  • GCD常用方法

    1、延迟做某些任务 2、多个任务同时进行,等任务全部完成之后去进行下一步操作。例如:下面的为网络刷新数据, 但是刷...

  • GCD 常用方法

    1. dispatch_async 异步添加到队列 Demo: 2. dispatch_after 延后添加到队列...

  • GCD常用方法

    //1、创建主线程(串行) dispatch_async(dispatch_get_main_queue(), ^...

网友评论

      本文标题:swift GCD常用方法(转载)

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