iOS 线程之GCD的高级用法

之前的一篇关于线程的blog已经为大家介绍了GCD的简单使用方式及例子说明,今天由于项目中有特殊的应用GCD的实例,为大家介绍两种特殊需求的使用GCD的方法。

目的:实现一件事情做完,再做下一件事情,确保函数的执行周期。

解决方案:提供以下2种解决方案

1、创建barrier等待线程

dispatch_async(dispatch_get_main_queue(), ^{

[self ActionFirst];

});

dispatch_barrier_async(dispatch_get_main_queue(), ^{

[self ActionNext];

});

2、创建group线程组(即 队列queue)

dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group, dispatch_get_main_queue(), ^{

[self ActionFirst];

});

dispatch_group_notify(group, dispatch_get_main_queue(), ^{

[self ActionNext];

});

出现问题的代码如下:

-(void)example

{

[self ActionFirst];

[self ActionNext];

}

产生原因:调用example函数时,由于ActionFirst函数执行的时间比较长,当ActionNext函数执行完时,ActionFirst可能还没有执行完,导致执行ActionNext时出现崩溃的现象。

时间: 2024-10-16 20:35:51

iOS 线程之GCD的高级用法的相关文章

iOS多线程之GCD小记

iOS多线程之GCD小记 iOS多线程方案简介 从各种资料中了解到,iOS中目前有4套多线程的方案,分别是下列4中: 1.Pthreads 这是一套可以在很多操作系统上通用的多线程API,是基于C语言的,在在oc中使用时需要包含 #import<pthread.h> 使用这种多线程方案需要手动处理线程的各个状态的转换,也就是要管理线程的生命周期. 2.NSThread 这种多线程方案经过了苹果的封装,是一种面向对象的方案,因此可以直接操控线程对象,相对来说比较便捷,其生命周期也要手动管理 3.

OC多线程之GCD

要了解多线程首先要知道什么是进程,什么是进程? 正在进行中的程序被称为进程,负责程序运行的内存分配 每一个进程都有自己独立的虚拟内存空间 什么是线程: 线程是进程中一个独立的执行路径(控制单元) 一个进程中至少包含一条线程,即主线程 可以将耗时的执行路径(如:网络请求)放在其他线程中执行 创建线程的目的就是为了开启一条新的执行路径,运行指定的代码,与主线程中的代码实现同时运行 线程的优缺点: 优势 (1)充分发挥多核处理器优势,将不同线程任务分配给不同的处理器,真正进入“并行运算”状态 (2)将

OC多线程之GCD ----- 2

dispatch_create生成的Queue不管是并行队列还是串行队列,其优先级都是默认优先级 但是可以用dispatch_set_target_queue来改变队列的优先级 dispatch_set_target_queue(原来的队列, 目标优先级队列) 使用这个函数需要获取两个队列,一个是需要变更优先级的队列,一个是指定优先级的队列(指定优先级的队列可以通过get_global获得) 如果多个串行队列优先级相同,那么这些队列里的任务也会串行执行 dispatch_after函数并不能非常

多线程之GCD(Grand Central Dispatch)

GCD是纯C语言,但又溶有面向对象思想.基于Block. 1.GCD优点: 易用:GCD比thread更简单易用,基于Block的特性导致它能极为简单的在不同代码作用域之间传递上下文. 效率:GCD在很多地方比之专门创建消耗资源的线程更实用.快速. 性能:GCD自动根据系统负载来增减线程数量,减少了上下文切换以及提高了计算效率. 2.GCD的使用 2.1.dispatch async异步操作 2.1.1.定义想要执行的操作(任务),追加到适当的队列中(Dispatch Queue) 2.12.Q

iOS开发-多线程之GCD(Grand Central Dispatch)

Grand Central Dispatch(GCD)是一个强有力的方式取执行多线程任务,不管你在回调的时候是异步或者同步的,可以优化应用程序支持多核心处理器和其他的对称多处理系统的系统.开发使用的过程中只需要将执行的任务并添加到到适当的Dispatch Queue中,GCD就能生成必要的线程并计划执行任务.Dispatch Queue更简单而且在实现符合需求的多线程任务时更有效率.Dispatch  Queue一般来说有三种方式,如下图: Serial执行的时候的先进先出,Concurrent

iOS多线程之GCD的基本使用

使用GCD开发的基本思路 基本思想:将任务(操作)放在队列中去执行 任务使用block定义 队列负责调度任务执行所在的线程以及具体的执行时间 队列的特点是先进先出(FIFO)的,新添加至队列的操作都会排在队尾. GCD的函数都是以dispatch开头的 注意 :队列不是线程,也不对应CPU. 队列:dispatch_queue_t 两种队列:串行队列.并行队列 队列上的操作:添加任务 两种任务:同步任务.异步任务 队列及任务 GCD的串行队列,意味着队列中的任务排队执行 1)添加异步任务:创建一

iOS 多线程之GCD的使用

在iOS开发中,遇到耗时操作,我们经常用到多线程技术.Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法,只需定义想要执行的任务,然后添加到适当的调度队列(dispatch queue).GCD会负责创建线程和调度你的任务,系统直接提供线程管理. 一.队列: 基本概念: 1.GCD的一个重要概念是队列,它的核心理念:将长期运行的任务拆分成多个工作单元,并将这些单元添加到dispath queue中,系统会为我们管理这些dispath queue,为我

(五十五)iOS多线程之GCD

GCD的全称为Grand Central Dispatch,翻译为大中央调度,是Apple开发的一个多线程编程解决方法. 进程和线程的概念: 正在进行中的程序被称为进程,负责程序运行的内存分配,每一个进程都有自己独立的虚拟内存空间. 线程是进程中一个独立的执行路径,即主线程,主线程有1M的栈区,对于耗时的执行路径,可以放在子线程(512K栈区)中执行. Tip:新建线程会消耗内存空间和CPU事件,线程太多会降低系统的运行性能,多线程是通过CPU时分复用实现的. Tip:多线程是为了并发执行多项任

iOS多线程之GCD学习笔记

什么是GCD 1.全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 2.纯C语言,提供了非常多强大的函数 GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 任务和队列 GCD中有2个核心概念 任务:执行什么操作 队列:用来存放任务 GCD的使用就2个步骤,首先确定定制任务(