[第2章]多线程:GCD的简单使用(2)——调度组

接着上篇

Dispatch Groups

介绍

Grouping blocks allows for aggregate synchronization. Your application can submit multiple blocks and track when they all complete, even though they might run on different queues. This behavior can be helpful when progress can’t be made until all of the specified tasks are complete.

适用场合:把多个耗时操作(例如,网络请求)放到一个组内,等组内操作全部执行完毕之后,通知(dispatch_group_notify)执行最后的操作(例如,更新UI)。

1、dispatch_group_create

获得一个新的调度组。

PS:没有dispatch_release这个方法。

2、(异步)dispatch_group_async:::

使用这个方法,添加Block到指定的调度组。

3、(异步)dispatch_group_notify:::

监控的调度组内所有操作执行完毕时,执行此方法中的block。

4、(同步)dispatch_group_wait::

注意:

1、同步方法;

2、监控的调度组内所有操作执行完毕,立即返回0;否则,时间到,调度组恢复原来的状态。(PS:经测试,超时之后,调度组内的操作还是会执行;不知道恢复到原始的状态是什么意思?)

5、其他方法

dispatch_group_enter(_ group: dispatch_group_t)

dispatch_group_leave(_ group: dispatch_group_t)

手动增加(或减少)指定调度组内一个block(需成对出现)。

dispatch_suspend(_ object: dispatch_object_t)

dispatch_resume(_ object: dispatch_object_t)

手动禁止(或允许)新的block加入调度组(需成对出现)。

实现代码

// 1、创建一个调度组实例。
let group = dispatch_group_create()

// 1、并行队列。
let queue = dispatch_queue_create("com.archon.test", DISPATCH_QUEUE_CONCURRENT)

// 2、添加一个block
dispatch_group_async(group, queue) { () -> Void in
    // code..
}

// 2、再添加一个block
dispatch_group_async(group, queue) { () -> Void in
    // code..
}

// 3、最后执行的block
dispatch_group_notify(group, dispatch_get_main_queue()) { () -> Void in
    println("ok")
}

// 3、dispatch_time 的使用
//       var time = dispatch_time(DISPATCH_TIME_NOW, (Int64)(NSEC_PER_SEC * 3))
//        var i = dispatch_group_wait(group, time)

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-09 22:35:41

[第2章]多线程:GCD的简单使用(2)——调度组的相关文章

[第2章]多线程:NSOperation的简单使用

一.介绍 特点 在GCD基础上实现 更好地控制和处理大量并发操作 比GCD速度稍慢 1.NSOperation NSOperation是抽象类,使用方法: 1.使用系统提供的子类: 2.自定义类. 依赖关系: 键值对象: 2.NSOperationQueue NSOperationQueue,用于调度和管理NSOperation. 二.使用系统类 (并行)NSBlockOperation 代码 // 1.operation1和operation2 let operation1 = NSBlock

[第2章]多线程:NSThread简介

一.说明 操作的是线程,不是封装好的队列或队列:适用于长时间一直使用的子线程. 二.方法 1.睡眠 // 1.睡到指定时间. class func sleepUntilDate(date: NSDate) // 2.跟sleep()一样(PS:typealias NSTimeInterval = Double) class func sleepForTimeInterval(ti: NSTimeInterval) 2.线程运行Selector NSThread.detachNewThreadSe

[第1章]地图:iOS简易导航

一.类介绍 MKDirections 官方文档: 解析: 1.从Apple服务得到导航服务,执行导航需要一个请求类--MKDirectionRequest(下面介绍): 2.每个实例只处理一次导航请求,如果处理多个请求,要创建多个实例: 3.不要在短时间内,请求过多次,否则触发MKErrorLoadingThrottled. // request must not be nil. init(request request: MKDirectionsRequest) // 计算导航路线,在闭包ha

iOS多线程GCD的简单使用

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

关于ios多线程GCD的简单介绍

很久没写博客了,实在太忙了,没有时间写.现在终于空闲下来了,今天就给大家介绍下ios开发里GCD的用法. 刚开始学习的新手,或许对多线程很迷茫,那么什么是线程呢?其实很简单,不要想那么复杂. 1.我们通常知道进程,就是正在执行中的程序,每个进程有自己独立的内存空间,进程之间互相不干涉.(就比如你打开微信) 2.什么是线程?线程是进程执行的基本单元.进程中的任务是在线程中执行的,进程在启动后会自动蜕化为主线程(ios UI Main thread),然后在执行任务. 3.线程的串航执行,比如我要下

ios多线程-GCD基本用法

ios中多线程有三种,NSTread, NSOperation,GCD 这篇就讲讲GCD的基本用法 平时比较多使用和看到的是: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //异步操作代码块 dispatch_async(dispatch_get_main_queue(), ^{ //回到主线程操作代码块 }); }); 比较多的用于更新ui操作 比如从数据库获取数据需要花较长的

java_第9章:多线程

030901_[第9章:多线程]_认识多线程 030902_[第9章:多线程]_线程常用操作方法 030903_[第9章:多线程]_线程操作范例 030904_[第9章:多线程]_同步与死锁 030905_[第9章:多线程]_线程操作案例--生产者和消费者 030906_[第9章:多线程]_线程生命周期

iOS多线程 GCD

iOS多线程 GCD Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main queue,通过dispatch_get_main_queue获取. /*! * @function dispatch_get_main_queue * * @abstract * Returns the default queue that is bound to the main thread. *

[Swift中错误]missing argument label 'greeting:' in call

Swift 中出现这个问题:从第二个参数起,自动加上lable func sayHello(name:String? ,greeting:String)->String { let result = greeting + "," + (name ?? "Guest") + "!" return result } var nickname:String? nickname = "yc" //“Goodmorning前面应该