IOS 多线程之GCD

参考:http://www.cnblogs.com/wendingding/p/3806821.html

<<Objective-C基础教程>> 第二版

一 简介

GCD 全称是Grand Central Dispatch,可译为:”牛逼的中央调度器”。是苹果公司为多核并行运算提出的解决方案。自动管理线程的生命周期(创建线程,调度任务,销毁线程等),程序员只需要告诉GCD想要执行什么的任务,不需要编写任何线程管理代码。

1 GCD存在于libdispatch.dylib这个库中,默认加载。

2 GCD是纯C语言的,因此我们在编写GCD相关代码的时候,面对的函数,而不是方法。

3 GCD中的函数大多数都以dispatch开头。

4 属性如果没有指定nonatomic,则编译器的getter与setter方法互斥。

5 后台执行代码前缀一般是:performSelector... ,最简单的就是performSelectorInBackground:withObject

6 线程中的代码最多只能有一个参数。

二 任务与队列

GCG中有两个核心概念:任务,执行什么操作;队列,存放任务。

1 GCD中有两个执行任务的函数:

同步方式 dispatch_sync(dispatch_queue_t queue, dispatch_block_t block)

异步方式 dispatch_async(dispatch_queue_t queue, dispatch_block_t block)

区别:同步方式在当前线程中执行,异步方式在另一个线程中执行。 

添加任务最简单的方法如上添加代码块,或者添加函数:

dispatch_async_f(“…”,(__bridge void *)[NSNumber numberWithInt:3],(dispatch_function_t)mydispatchFunction);

dispatch_sync_f(…)

队列的暂停与恢复:dispatch_suspend(_serial_queue);dispatch_resume(_serial_queue);

2 队列分为两大类型:

并发队列(Concurrent Dispatch Queue):可以让多个任务并发(同时)执行(自动开启多个线程同时执行任务)并发功能只有在异步(dispatch_async)函数下才有效.全局的,无需内存管理。

创建方法 dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

串行队列(Serial Dispatch Queue):一个任务执行完毕后,再执行下一个任务.先入先出(FIFO).

创建方法:dispatch_queue_t queue = dispatch_queue_create(“queue”,NULL);

另:主队列:dispatch_queue_t queue = dispatch_get_main_queue();它是特殊的串行队列。

获取当前队列:dispatch_queue_t queue = dispatch_get_current_queue();

队列的内存管理:dispatch_retain(),dispatch_release(),只能用于自己创建的队列,全局队列不可用。

原文地址:https://www.cnblogs.com/qq411715078/p/5139280.html