iOS中多线程编程工具主要有:
- NSThread
- NSOperation
- GCD
这三种方法都简单易用,各有千秋.但无疑GCD是最有诱惑力的,因为其本身是apple为多核的并行运算提出的解决方案.虽然当前移动平台用双核的不多,但不影响GCD作为多线程编程的利器(ipad2已经是双核了,这无疑是一个趋势).
GCD是和block紧密相连的,所以最好先了解下block(可以查看这里).GCD是C level的函数,这意味着它也提供了C的函数指针作为参数,方便了C程序员.
下面首先来看GCD的使用:
dispatch_async(dispatch_queue_t queue, dispatch_block_t block);
async表明异步运行,block代表的是你要做的事情,queue则是你把任务交给谁来处理了.(除了async,还有sync,delay,本文以async为例).
之所以程序中会用到多线程是因为程序往往会需要读取数据,然后更新UI.为了良好的用户体验,读取数据的操作会倾向于在后台运行,这样以避免阻塞主线程.GCD里就有三种queue来处理.
1. Main queue:
顾名思义,运行在主线程,由dispatch_get_main_queue获得.和ui相关的就要使用Main Queue.
2.Serial quque(private dispatch queue)
每次运行一个任务,可以添加多个,执行次序FIFO. 通常是指程序员生成的,比如:
NSDate *da = [NSDate date]; NSString *daStr = [da description]; const char *queueName = [daStr UTF8String]; dispatch_queue_t myQueue = dispatch_queue_create(queueName, NULL);
3. Concurrent queue(global dispatch queue):
可以同时运行多个任务,每个任务的启动时间是按照加入queue的顺序,结束的顺序依赖各自的任务.使用dispatch_get_global_queue获得.
所以我们可以大致了解使用GCD的框架:
dispatch_async(getDataQueue,^{ //获取数据,获得一组后,刷新UI. dispatch_aysnc (mainQueue, ^{ //UI的更新需在主线程中进行 }; } )
由此可见,GCD的使用非常简单,以我的使用经验来看,以后会逐步淘汰使用NSOperation而改用GCD.
相关推荐
dispatch_queue_t queue = dispatch_queue_create("com.gcd-dispatch_group_async(gro
1. dispatch_queue_t queue = dispatch_queue_create(“com.dispatch.serial”, DISPATCH_QUEUE_SERIAL); //生成一个串行队列,队列中的block按照先进先出(FIFO)的顺序去执行,实际上为单线程
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法。 dispatch queue分成以下三种: 1)运行在主线程的Main queue,通过dispatch_get_main_queue获取。 #definedispatch_get_main_queue() \DISPATCH...
此文档介绍了GCD的基本概念及核心方法,Dispatch Queue,Dispatch Source等等特性。
在将任务插入到queue的时候, dispatch_barrier_sync需要等待自己的任务结束之后才会继续程序,然后插入被写在它后面的任务。 2、dispatch_barrier_async:异步栅栏函数会开辟新线程执行block;ispatch_barrier_...
Apple的Grand Central Dispatch(GCD)的防锈包装。 GCD是任务并行性的一种实现,它允许将任务提交到用于Apple的Grand Central Dispatch(GCD)的Rust包装器的队列。 GCD是任务并行性的一种实现,它允许将任务提交到...
异步OC 用Objective-C重写... 代替熟悉的GCD语法: dispatch_async (dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0 ), ^{ NSLog ( @" A: This is run on the background " ); dispatch_async ( dis
GCD是Grand Central Dispatch的简称,它是基于C语言的。如果使用GCD,完全由系统管理线程,我们不需要编写线程代码。只需定义想要执行的任务,然后添加到适当的调度队列(dispatch queue)。GCD会负责创建线程和调度你...
苹果官方文档的翻译,详细讲解。NSOperation+NSOperationQueue,GCD+dispatch_queue,RunLoop等详细介绍。
详解IOS串行队列与并行队列进行同步或者异步的实例 IOS中GCD的队列分为串行队列和并行队列,任务分为同步任务和异步任务,他们的排列组合有四种情况,... dispatch_queue_t concurrentQueue = dispatch_queue_create(c
简单的线程dome,适合初学者的使用, //dispatch_async(queue,^{});... //dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0) 得到全局队列 //diapatch_get_main_queue() 得到主线程,即UI队列
Queuer是一个队列管理器,建立在和 (aka GCD)之上。 它使您可以轻松地创建任何异步和同步任务,全部由一个队列管理,只需几行。 这是所有功能的列表: 可在所有Swift兼容平台(甚至Linux)上运行 易于使用 ...
Grand Central Dispatch(GCD)是异步执行任务的技术之一。一般将应用程序中记述的线程管理用的代码在系统级中实现。开发者只需要定义想执行的任务并追加到适当的Dispatch Queue中,GCD就能生成必要的线程并计划执行...
异步的Objective-C中的语法糖,用于Grand Central Dispatch... 代替熟悉的GCD语法: dispatch_async (dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0 ), { NSLog ( @" ===>>> This is run on the b
Grand Central Dispatch(GCD)是异步执行任务的技术之一 dispatch queue分成以下三种: 1)运行在主线程的Main queue,通过dispatch_get_main_queue获取。 /*! * @function dispatch_get_main_queue * * @...
CocoaAsyncSocket为macOS,iOS和tvOS提供了易于使用且功能强大的异步套接字库。... 它完全在自己的GCD dispatch_queue中运行,并且是完全线程安全的。 此外,所有委托方法都异步调用到您选择的dispatch_queue上。
dispatch_queue_t queue=dispatch_get_main_queue(); (1)使用异步函数执行主队列中得任务,代码示例: 代码如下: // // YYViewController.m // 12-GCD的基本使用(主队列) // // Created by 孔医己 on 14-6...
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //创建一个定时器 _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); /
前言 在iOS 网络编程有一种常见的场景是:我们需要并行处理二个请求并且在都成功后才能进行下一步处理。下面是部分常见的处理方式,但是在使用过程中也很容易出错: ... 同步 DispatchQueue:通过同步队列和 NSLoc
切换到主线程队列,执行刷新操作 dispatch_async(dispatch_get_main_queue(), ^{ //主线程中执行UI刷新 imageView.image = image; });