swift GCD的简单使用

  • 回到主线程
        DispatchQueue.main.async {
           //            print("这里是主线程")
        }
  • 延时执行
        let deadline = DispatchTime.now() + 5.0
        DispatchQueue.global().asyncAfter(deadline: deadline) {
            //            print("这里是延迟做的事情")
        }
  • 开启一个异步线程
        DispatchQueue.main.async {
            print("开新异步线程执行")
        }
  •  开启一个同步线程
DispatchQueue.global().sync {

}
  • 线程优先级
        var queue: DispatchQueue = DispatchQueue.global()//
        //DispatchQueue.GlobalQueuePriority 有四中选择 high,`default`,low,background
        queue = DispatchQueue.global(priority: DispatchQueue.GlobalQueuePriority.background)// 后台执行
        // 异步执行队列任务
        queue.async {
            //  print("开新线程执行")
        }
  •  分组执行
       let group = DispatchGroup()
        queue = DispatchQueue.global(priority: DispatchQueue.GlobalQueuePriority.default)// 默认优先级执行
        for i in 0 ..< 10 {
            //异步执行队列任务
            queue.async(group: group, execute: {
                print("queue.async(group: group \(i)")
            })
        }
        // 分组队列执行完毕后执行
        group.notify(queue: queue) {
            print("dispatch_group_notify")
        }
  • 串行队列:只有一个线程,加入到队列中的操作按添加顺序依次执行。
       let serialQueue = DispatchQueue(label: "yangj", attributes: [])
        for i in 0 ..< 10 {
            //异步执行队列任务
            serialQueue.async {
                print("serialQueue.async \(i)")
            }
        }
  • 并发队列:有多个线程,操作进来之后它会将这些队列安排在可用的处理器上,同时保证先进来的任务优先处理。
        let globalQueue = DispatchQueue.global(priority: DispatchQueue.GlobalQueuePriority.default)
        for i in 0 ..< 10 {
            //异步执行队列任务
            globalQueue.async {
                print("globalQueue.async \(i)")
            }
        }
  •  信号量
       //DispatchSemaphore 因为信号量值为1,所以一次只能执行一个
        let semaphore = DispatchSemaphore(value: 1)
        let queue = DispatchQueue.global()
        queue.async {
            semaphore.wait()
            let deadline = DispatchTime.now() + 3.0
            DispatchQueue.global().asyncAfter(deadline: deadline) {
                print("-----------------1");
                semaphore.signal()
            }

        }
        queue.async {
            semaphore.wait()
            let deadline = DispatchTime.now() + 10.0
            DispatchQueue.global().asyncAfter(deadline: deadline) {
                 print("-----------------2");
                 semaphore.signal()
            }

        }
        queue.async {
            semaphore.wait()
            let deadline = DispatchTime.now() + 2.0
            DispatchQueue.global().asyncAfter(deadline: deadline) {
                print("-----------------3");
                semaphore.signal()
            }

        }
  • oc中dispatch_group_enter的使用
        // 创建调度组
        let workingGroup = DispatchGroup()
        // 创建多列
        let workingQueue = DispatchQueue(label: "request_queue")

        // 模拟异步发送网络请求 A
        // 入组
        workingGroup.enter()
        workingQueue.async {
            Thread.sleep(forTimeInterval: 1)
            print("接口 A 数据请求完成")
            // 出组
            workingGroup.leave()
        }

        // 模拟异步发送网络请求 B
        // 入组
        workingGroup.enter()
        workingQueue.async {
            Thread.sleep(forTimeInterval: 1)
            print("接口 B 数据请求完成")
            // 出组
            workingGroup.leave()
        }

        print("我是最开始执行的,异步操作里的打印后执行")

        // 调度组里的任务都执行完毕
        workingGroup.notify(queue: workingQueue) {
            print("接口 A 和接口 B 的数据请求都已经完毕!, 开始合并两个接口的数据")
        }

原文地址:https://www.cnblogs.com/hualuoshuijia/p/11699742.html

时间: 2024-11-07 11:39:05

swift GCD的简单使用的相关文章

Swift 写一个简单界面(实战-新手)

原文链接 在这篇博文中你可以看到那些内容呢, 首先这是一个用tableView纯代码Swift写的简单界面, 你可以看到下面这些 - 使用Alamofire 进行网络请求 - 使用MJExtension 进行字典转模型 - 使用HanekeSwift 进行图片的赋值 - 如何写一个模型(M) - 如何自定义一个UITableViewCell Alamofire 简单网络请求 func XTNetworkReq(url: String){ print("SUMMER_TEST_1") A

GCD的简单用法

/* 创建一个队列用来执行任务,TA属于系统预定义的并行队列即全局队列,目前系统预定义了四个不同运行优先级的全局队列,我们可以通过dispatch_get_global_queue来获取它们 四种优先级 DISPATCH_QUEUE_PRIORITY_HIGH DISPATCH_QUEUE_PRIORITY_DEFAULT DISPATCH_QUEUE_PRIORITY_LOW DISPATCH_QUEUE_PRIORITY_BACKGROUND 不得已情况下可用dispatch_queue_c

Swift入门很简单

Swift入门很简单 <Swift入门很简单>清华大学出版社,全书共16章,分为3篇. 第 1 篇  介绍了Swift开发环境的搭建.Swift基本应用程序的创建.数据类型.语句.表达式.字符串.集合类型.程序控制结构.函数和闭包等内容: 第 2 篇  介绍了类.继承.枚举类型.结构.构造器.析构方法.扩展和协议等内容: 第 3 篇  介绍了自动引用计数.运算符重载和泛型等内容. 试读下载地址:http://pan.baidu.com/s/1mg0ytVq 随书工具下载地址:http://pa

李洪强iOS开发Swift篇—01_简单介绍

李洪强iOS开发Swift篇—01_简单介绍 一.简介 Swift是苹果于2014年WWDC(苹果开发者大会)发布的全新编程语言 Swift在天朝译为“雨燕”,是它的LOGO 是一只燕子,跟Objective-C一样,可以用于开发iOS.Mac应用程序 苹果从2010年7月开始设计Swift语言,耗时4年打造 Swift的语法特点 从它的语法中能看到Objective-C.JavaScript.Python等语言的影子 语法简单.代码简洁.使用方便 可与Objective-C混合使用(相互调用)

Swift 入门之简单语法(四)

函数 目标 掌握函数的定义 掌握外部参数的用处 掌握无返回类型的三种函数定义方式 代码实现 函数的定义 格式 func 函数名(行参列表) -> 返回值 {代码实现} 调用 let result = 函数名(值1, 参数2: 值2...) func sum(a: Int, b: Int) -> Int { return a + b } let result = sum(10, b: 20) 没有返回值的函数,一共有三种写法 省略 () Void func demo(str: String) -

Swift 入门之简单语法(六)

KVC 字典转模型构造函数 /// `重写`构造函数 /// /// - parameter dict: 字典 /// /// - returns: Person 对象 init(dict: [String: AnyObject]) { setValuesForKeysWithDictionary(dict) } 以上代码编译就会报错! 原因: KVC 是 OC 特有的,KVC 本质上是在运行时,动态向对象发送 setValue:ForKey: 方法,为对象的属性设置数值 因此,在使用 KVC

iOS多线程GCD的简单使用

在iOS开发中,苹果提供了三种多线程技术,分别是: (1)NSThread (2)NSOperation (3)GCD 简单介绍一下GCD的使用. GCD全称 Grand Central Dispatch,可以称之为大中央调度.实际上GCD是管理着一个线程池,如何创建线程,如何回收线程,以及分配多少个线程,这些都是GCD来控制的.在开发中,程序员是不用操作线程的相关事情,程序员只需要把应该做的操作放到相应的队列里面即可. 一:自定义队列 GCD中有多种队列,其中自定义的队列有两种:串行队列和并行

Swift - 做一个简单的无线U盘(手机端Http服务器搭建)

由于iOS系统的封闭性,在数据传输方面十分不方便.不像安卓设备,直接连接电脑就能当U盘使用.所以一般我们如果用iPhone临时存取个东西,要么使用数据线连接iTunes,要么手机电脑都登上QQ,使用QQ来传输. 但这两种方式都略显不便,所以市面上出现了无线U盘这类的APP.原理很简单,就是软件打开后会启动HTTP服务器,这时电脑端使用浏览器输入 手机的ip,就可以通过web页面的形式访问到这个软件的用户文档.同时在这个web页面里,直接可以进行文件的上传,下载,删除等操作. 下面演示如何开发一个

Swift之旅:1.概述-用Swift实现一个简单的计算器

学习所用到的资源: 斯坦福大学公开课:iOS 8开发 网易空开课地址链接:斯坦福大学公开课:IOS8开发 github上字幕链接:字幕 百度网盘资源下载链接:百度网盘 1.详解IOS编程的四个层 ①cocoa touch层 这是我们最长用到的层,里面最长用到的当然是最基础的控件 ②媒体层(Media) ③核心服务层 ④核心操作系统层 2.新建一个Swift的IOS工程 ①打开Xcode,按照图示新建一个工程 ②选择Application 然后 单击Sigle View Application.