GCD的工作原理:
让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务(比如一个函数).
GCD中的队列称为dispatch queue,它可以保证先进来的任务先得到执行
dispatch queue又分为三种:
Serial
又称为private dispatch queues,同时只执行一个任务。所以也可以创建多个Serial queue,它们各自是同步执行的,但Serial queue之间是并发执行的。
Concurrent
又称为global dispatch queue,可以并发地执行多个任务,但是执行完成的顺序是随机的。
Main dispatch queue
它是全局可用的serial queue,它是在应用程序主线程上执行任务的(UI线程:程序打开的第一个页面)。
常用的几种方法:
1.dispatch_async
为了避免界面在处理耗时的操作时卡死,比如读取网络数据,数据库读写等,会在另外一个线程中处理这些操作,然后通知主线程更新界面。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 耗时的操作 比如下载图片
dispatch_async(dispatch_get_main_queue(), ^{
// 通知主线程更新界面
});
});
2、dispatch_group_async
dispatch_group_async可以实现监听一组任务是否完成,完成后得到通知执行其他的操作。比如你执行三个下载任务,当三个任务都下载完成后你才通知界面说完成的了
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, queue, ^{ [NSThread sleepForTimeInterval:1]; NSLog(@"one"); }); dispatch_group_async(group, queue, ^{ [NSThread sleepForTimeInterval:2]; NSLog(@"two"); }); dispatch_group_async(group, queue, ^{ [NSThread sleepForTimeInterval:3]; NSLog(@"three"); }); dispatch_group_notify(group, dispatch_get_main_queue(), ^{ NSLog(@"UI"); }); dispatch_release(group);
根据上面代码执行之后的结果是:one 、two、three、UI
因为只有前三个任务完成之后才会执行最后一个任务。
3、dispatch_barrier_async
dispatch_barrier_async是在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行。
dispatch_queue_t queue = dispatch_queue_create("gcdtest.rongfzh.yc", DISPATCH_QUEUE_CONCURRENT); dispatch_async(queue, ^{ [NSThread sleepForTimeInterval:2]; NSLog(@"dispatch_async_one"); }); dispatch_async(queue, ^{ [NSThread sleepForTimeInterval:4]; NSLog(@"dispatch_async_two"); }); dispatch_barrier_async(queue, ^{ NSLog(@"dispatch_barrier_async"); [NSThread sleepForTimeInterval:4]; }); dispatch_async(queue, ^{ [NSThread sleepForTimeInterval:1]; NSLog(@"dispatch_async_three"); });
最终输出的顺序为dispatch_async_one、dispatch_async_two、dispatch_barrier_async、dispatch_async_three
相关推荐
文档主要涵盖的技术点包括NSThread、NSOperation以及Grand Central Dispatch(GCD),这些技术是iOS开发者在开发应用程序时常用的技术。 首先,文档对多线程进行了定义。多线程指的是在单个应用程序中,能够并发...
定义:GCD是苹果公司开发的一套多线程编程的API,用于简化多线程编程的复杂性。 功能:GCD提供了一个易于使用的、基于任务的并发模型,可以将任务提交给系统,系统会自动管理线程的创建、销毁和调度,以实现最佳的...
本文将深入探讨四种常用的iOS多线程开发方式:pthread、NSThread、NSOperation及NSOperationQueue,以及Grand Central Dispatch(GCD)。 首先,让我们了解下pthread。pthread是POSIX线程库,它在iOS中被用于跨平台...
多线程虽然是并发执行代码的传统方式,但是苹果公司推荐使用更加现代化的方法,例如操作对象(Operation objects)和Grand Central Dispatch(GCD)。这些技术提供了更高效的多核并发实现机制。 #### 1.4 线程支持 ...
在iOS平台上,多线程编程可以通过多种技术实现,包括NSThread、Grand Central Dispatch(GCD)、Operation Objects等。本文档将重点讨论iOS平台下的多线程编程技术。 首先,我们需要明确什么是多线程。多线程是指在...
iOS多线程编程之Grand Central Dispatch(GCD)使用,卖票的例子来讲NSThread的线程同步,使用了两种锁,一种NSCondition ,一种是:NSLock,还有加了一个 线程3 去唤醒其他两个线程锁中的wait,里面的注释很已经写的...
文档提到了iOS平台上支持的多种多线程技术,比如使用NSThread类、POSIX线程以及Grand Central Dispatch(GCD)等。这些技术各有优势,在实际开发中,开发者需要根据应用需求选择合适的多线程方案。 文档详细讲解了...
iOS多线程编程之Grand Central Dispatch(GCD)使用,具有1、常用的方法dispatch_async 2、dispatch_group_async 3、dispatch_barrier_async 4、dispatch_apply的用法
2、Cocoa NSOperation (iOS多线程编程之NSOperation和NSOperationQueue的使用)3、GCD 全称:Grand Central Dispatch( iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用) 这三种编程方式从上到下,抽象度...
### iOS多线程编程技术详解:NSThread、Cocoa NSOperation、GCD #### 一、多线程基本概念 1. **进程**:在移动设备(如iPhone)上,每一个应用程序都可以被视为一个独立的进程。每个进程都会有一个主线程(main ...
在iOS和Mac开发中,Cocoa框架提供了强大的多线程编程支持,让我们能够高效地处理复杂的并发任务。本文将深入探讨Cocoa中的多线程编程,特别是如何利用block(闭包)和dispatch queue(调度队列)来实现线程间的协调...
### iOS多线程与GCD概述 在iOS开发中,多线程是一个非常重要的概念。通过多线程,我们可以利用多核处理器的优势,将不同任务分散到多个线程中执行,从而提高程序的响应速度和执行效率。GCD(Grand Central Dispatch...
本文将深入探讨iOS中的多线程编程,包括GCD(Grand Central Dispatch)、NSOperation、NSThread的使用,以及异步和同步下载、Block的运用,以及ASIHttpRequest类库的使用。 首先,GCD是Apple推出的一种多线程解决...
iOS多线程编程是iOS开发中的一个重要方面,它允许应用程序同时执行多个代码路径,以实现更高效的计算和响应。本文档是由Apple公司出品的官方多线程编程指南的翻译版本,由謝業蘭【老狼】翻译,并获得了有米移动广告...
Grand Central Dispatch (GCD) 是 iOS 4.0 之后引入的多线程编程方式,提供了更多的特性和运行库来支持多核并行编程。 NSThread 是 iOS 中的一种多线程编程方式,使用 NSThread 可以创建和管理线程。NSThread 提供...
本文将深入探讨iOS多线程编程的主要知识点。 首先,我们要了解iOS中的多线程模型。主要有三种实现方式:NSOperationQueue、NSThread和GCD(Grand Central Dispatch)。GCD是苹果推出的一种高效、简洁的多线程管理...
在“iOS多线程Demo”中,可能会包含如何在后台线程完成耗时操作后,在主线程更新UI的方法,如使用`dispatch_async`向主线程发送任务,或者使用`performSelectorOnMainThread`。 此外,多线程还会涉及线程安全问题,...