GCD,大家都知道的回顾

GCD,自iOS4.0吧,比block还要早,他的用处主要是体现在线程方面,比如你有个比较麻烦的而且循环比较大的代码段什么,比如有个后台下载什么的,这都必须放在子线程里一个放在子线程里执行,为了不影响用户体验!

来说说几个很基本的东西方便了解:

串行

系统默认就有一个串行队列main_queue,也就是主线程所在的队列,因为是串行,所以可以认为通过这个回到主线程

自定义dispatch_queue_create([queueName
cStringUsingEncoding:NSUTF8StringEncoding],
                           
DISPATCH_QUEUE_CONCURRENT);(queueName
自定义的串行队列的名称)

执行一般是dispatch_get_main_queue()

并行

系统默认就有一个并行队列global_queue

自定义dispatch_queue_create([queueName
cStringUsingEncoding:NSUTF8StringEncoding],
                           
DISPATCH_QUEUE_SERIAL);

关于并行,有个优先级的问题,看看系统给的,2,0 ,-2 和最小。。。

#define
DISPATCH_QUEUE_PRIORITY_HIGH 2

#define
DISPATCH_QUEUE_PRIORITY_DEFAULT 0

#define
DISPATCH_QUEUE_PRIORITY_LOW (-2)

#define
DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN

执行一般是dispatch_get_global_queue(这里是填优先级,
这个值可以看说明默认是0);

一般经常干的事是什么呢

dispatch_async(这里是并发, ^{

// long-running task
code here
     
  dispatch_async(这里是串行,^{

      //update UI code here

          });
    });

线程的延时操作

dispatch_time(DISPATCH_TIME_NOW(这个是以程序执行的时间点),
seconds * NSEC_PER_SEC(这里是设定精确级别的));

dispatch_after(dispatch_time_t
when(这个就是上面生成的一个time),dispatch_queue_t queue(队列),dispatch_block_t block(延迟执行的语句));

线程组

dispatch_group_create()创建一个组

可以用来监控一个group里的内容是否执行完成

dispatch_group_notify(dispatch_group_t group,

            dispatch_queue_t
queue,

            dispatch_block_t
block);

很奇特的GCD,不是么,group是一个个执行的,但是在这其中,不管你是并行或串行,根本就不会按你所想的规矩来,特别是并发的,当你加入一个group里面他可不会按你代码排的顺序来执行(包括串行),但是最终肯定会执行dispatch_group_notify参数里面的block语句。

GCD定时器

写成一个内联函数

NS_INLINE dispatch_source_t GCD_create_timer(int64_t
seconds, dispatch_queue_t queue,
void (^block)(dispatch_source_t
timer))
{
   
//创建Timer
   
   
dispatch_source_t
_timer =dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,
0, 0, queue);
  
 
   
//使用dispatch_source_set_timer函数设置timer参数
   
dispatch_source_set_timer(_timer,
                             
      dispatch_time(DISPATCH_TIME_NOW,
0),
                             
      seconds *
NSEC_PER_SEC,
                                   
0);
      
   
//设置回调
    dispatch_source_set_event_handler(_timer,
^(){
                                         
block(_timer);
                                     
});
    
   
//dispatch_source默认是Suspended状态,通过dispatch_resume函数开始它
   
dispatch_resume(_timer);
   
return _timer;
}

用完记得释放,否则。。。。(ARC可以不考虑,看看里面的实现吧!)

至于同步的。。。你觉得这有讨论的必要么,好吧,我确实不知道同步用在那些地方!

时间: 2024-10-08 14:58:27

GCD,大家都知道的回顾的相关文章

转 GCD

GCD 深入理解:第一部分 本文翻译自 http://www.raywenderlich.com/60749/grand-central-dispatch-in-depth-part-1 原作者:Derek Selander 译者:@nixzhu 虽然 GCD 已经出现过一段时间了,但不是每个人都明了其主要内容.这是可以理解的:并发一直很棘手,而 GCD 是基于 C 的 API ,它们就像一组尖锐的棱角戳进 Objective-C 的平滑世界.我们将分两个部分的教程来深入学习 GCD . 在这两

GCD 深入理解:第一部分

虽然 GCD 已经出现过一段时间了,但不是每个人都明了其主要内容.这是可以理解的:并发一直很棘手,而 GCD 是基于 C 的 API ,它们就像一组尖锐的棱角戳进 Objective-C 的平滑世界.我们将分两个部分的教程来深入学习 GCD . 在这两部分的系列中,第一个部分的将解释 GCD 是做什么的,并从许多基本的 GCD 函数中找出几个来展示.在第二部分,你将学到几个 GCD 提供的高级函数. 什么是 GCD GCD 是 libdispatch 的市场名称,而 libdispatch 作为

GCD 深入理解(一)

本文由@nixzhu翻译至raywenderlich的<grand-central-dispatch-in-depth-part-1> 虽然 GCD 已经出现过一段时间了,但不是每个人都明了其主要内容.这是可以理解的:并发一直很棘手,而 GCD 是基于 C 的 API ,它们就像一组尖锐的棱角戳进 Objective-C 的平滑世界.我们将分两个部分的教程来深入学习 GCD . 在这两部分的系列中,第一个部分的将解释 GCD 是做什么的,并从许多基本的 GCD 函数中找出几个来展示.在第二部分

GCD的深入理解

GCD 深入理解(一) 本文由@nixzhu翻译至raywenderlich的<grand-central-dispatch-in-depth-part-1> 虽然 GCD 已经出现过一段时间了,但不是每个人都明了其主要内容.这是可以理解的:并发一直很棘手,而 GCD 是基于 C 的 API ,它们就像一组尖锐的棱角戳进 Objective-C 的平滑世界.我们将分两个部分的教程来深入学习 GCD . 在这两部分的系列中,第一个部分的将解释 GCD 是做什么的,并从许多基本的 GCD 函数中找

GCD深入理解(一)

虽然 GCD 已经出现过一段时间了,但不是每个人都明了其主要内容.这是可以理解的:并发一直很棘手,而 GCD 是基于 C 的 API ,它们就像一组尖锐的棱角戳进 Objective-C 的平滑世界.我们将分两个部分的教程来深入学习 GCD . 在这两部分的系列中,第一个部分的将解释 GCD 是做什么的,并从许多基本的 GCD 函数中找出几个来展示.在第二部分,你将学到几个 GCD 提供的高级函数. 什么是 GCD GCD 是 libdispatch 的市场名称,而 libdispatch 作为

GCD 深入理解(一)(转)

并发编程之Operation Queue和GCD iOS多线程编程技术之NSThread.Cocoa NSOperation.GCD GCD 深入理解(一) GCD 深入理解(二) 本文由@nixzhu翻译至raywenderlich的<grand-central-dispatch-in-depth-part-1> 虽然 GCD 已经出现过一段时间了,但不是每个人都明了其主要内容.这是可以理解的:并发一直很棘手,而 GCD 是基于 C 的 API ,它们就像一组尖锐的棱角戳进 Objectiv

GCD 深入理解

GCD 深入理解(一) 虽然 GCD 已经出现过一段时间了,但不是每个人都明了其主要内容.这是可以理解的:并发一直很棘手,而 GCD 是基于 C 的 API ,它们就像一组尖锐的棱角戳进 Objective-C 的平滑世界.我们将分两 “” 阅读器 GCD 本文由@nixzhu翻译至raywenderlich的<grand-central-dispatch-in-depth-part-1> 虽然 GCD 已经出现过一段时间了,但不是每个人都明了其主要内容.这是可以理解的:并发一直很棘手,而 G

深入理解 GCD(一)

原文出处: Derek Selander   译文出处:nixzhu (@nixzhu)   欢迎分享原创到伯乐头条 虽然 GCD 已经出现过一段时间了,但不是每个人都明了其主要内容.这是可以理解的:并发一直很棘手,而 GCD 是基于 C 的 API ,它们就像一组尖锐的棱角戳进 Objective-C 的平滑世界.我们将分两个部分的教程来深入学习 GCD . 在这两部分的系列中,第一个部分的将解释 GCD 是做什么的,并从许多基本的 GCD 函数中找出几个来展示.在第二部分,你将学到几个 GC

&lt;转帖&gt;GCD 深入理解:第一部分

本文翻译自 http://www.raywenderlich.com/60749/grand-central-dispatch-in-depth-part-1 原作者:Derek Selander 译者:@nixzhu 虽然 GCD 已经出现过一段时间了,但不是每个人都明了其主要内容.这是可以理解的:并发一直很棘手,而 GCD 是基于 C 的 API ,它们就像一组尖锐的棱角戳进 Objective-C 的平滑世界.我们将分两个部分的教程来深入学习 GCD . 在这两部分的系列中,第一个部分的将