美文网首页iOS-OC中级
GCD 概述(一)

GCD 概述(一)

作者: 秀才不才 | 来源:发表于2015-12-22 15:53 被阅读20次
  1. dispatch_queue_t queue = dispatch_queue_create("com.dispatch.serial",DISPATCH_QUEUE_SERIAL);
    //生成一个串行队列,队列中的block按照先进先出(FIFO)的顺序去执行,实际上为单线程执行。第一个参数是队列的名称,在调试程序时会非常有用,所有尽量不要重名了。
  1. dispatch_queue_t queue = dispatch_queue_create("com.dispatch.concurrent",DISPATCH_QUEUE_CONCURRENT);
    //生成一个并发执行队列,block被分发到多个线程去执行
  1. dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    //获得程序进程缺省产生的并发队列,可设定优先级来选择高、中、低三个优先级队列。由于是系统默认生成的,所以无法调用dispatch_resume()和dispatch_suspend()来控制执行继续或中断。需要注意的是,三个队列不代表三个线程,可能会有更多的线程。并发队列可以根据实际情况来自动产生合理的线程数,也可理解为dispatch队列实现了一个线程池的管理,对于程序逻辑是透明的。

GCD用法

 //  后台执行:
 dispatch_async(dispatch_get_global_queue(0, 0), ^{
      // something
 });

<p>

 // 主线程执行:
 dispatch_async(dispatch_get_main_queue(), ^{
      // something
 });

<p>

 // 一次性执行:
 static dispatch_once_t onceToken;
 dispatch_once(&onceToken, ^{
     // code to be executed once
 });

<p>

 // 延迟2秒执行:
 //第一个参数dispatch_time_t , 指定的时间开始。经常使用DISPATCH_TIME_NOW,表示现在的时间。
 //第二个参数指定的毫微秒单位时间 ,NSEC_PER_MSEC毫秒 ,NSEC_PER_SEC秒
 double delayInSeconds = 2.0;
 dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
 dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
     // code to be executed on the main queue after delay
 });

<p>

 // 自定义dispatch_queue_t
 dispatch_queue_t urls_queue = dispatch_queue_create("blog.devtang.com", NULL);
 dispatch_async(urls_queue, ^{  
      // your code 
 });
 dispatch_release(urls_queue);

<p>

 // 合并汇总结果
 dispatch_group_t group = dispatch_group_create();
 dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{
      // 并行执行的线程一
 });
 dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{
      // 并行执行的线程二
 });
 dispatch_group_notify(group, dispatch_get_global_queue(0,0), ^{
      // 汇总结果
 });

GCD的另一个用处是可以让程序在后台较长久的运行。

// AppDelegate.h文件
@property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundUpdateTask;

// AppDelegate.m文件
- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [self beingBackgroundUpdateTask];
    // 在这里加上你需要长久运行的代码
    [self endBackgroundUpdateTask];
}

- (void)beingBackgroundUpdateTask
{
    self.backgroundUpdateTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
        [self endBackgroundUpdateTask];
    }];
}

- (void)endBackgroundUpdateTask
{
    [[UIApplication sharedApplication] endBackgroundTask: self.backgroundUpdateTask];
    self.backgroundUpdateTask = UIBackgroundTaskInvalid;
}

转载自:这里

相关文章

  • GCD 概述(一)

    dispatch_queue_t queue = dispatch_queue_create("com.dispa...

  • GCD概述

    进程:也就是一个正在运行的应用程序。 线程:进程中的某一条完整的执行路径。一个进程可以有多个线程,至少有一个线程,...

  • iOS多线程(二) - GCD

    前言 本系列文章列表 概述、NSThread GCD NSOperation 锁 GCD(Grand Centra...

  • iOS-多线程:NSOperation、NSOperationQ

    一、概述 NSOperation、NSOperationQueue是基于GCD的一层封装。相对于GCD来说,NSO...

  • GCD 概述(二)

    dispatch_queue_create(const char *label, dispatch_queue_a...

  • ios GCD概述

    GCD 容易混淆的术语 同步/异步/并发/串行 同步和异步: 决定要不要开启新的线程 并发与串行 决定了任务的执行...

  • GCD

    什么是GCD 概述:Grand Central Dispatch (GCD)包括语言特性、运行时库和系统增强,它们...

  • NSOperation&NSOperationQueue

    概述 NSOperation是对``GCD的封装,完全面向对象,使用起来更好理解。NSOperation对应GCD...

  • 多线程之GCD使用

    上文已经介绍了GCD的一些基本概念多线程操作之GCD概述 GCD 的使用步骤 创建一个队列(串行队列或并发队列) ...

  • Grand Central Dispatch 小记

    概述 GCD 是 iOS中一个非常重要的内容,关系到线程的分配和管理。 GCD 的一些概念 要了解GCD,你需要先...

网友评论

    本文标题:GCD 概述(一)

    本文链接:https://www.haomeiwen.com/subject/iozmhttx.html