深入IOS多线程 GCD(一)

一,什么是GCD

  GCD是异步执行任务的技术之一,一般将应用程序中记述的线程管理用的代码在系统级中实现。开发者只需要定义想执行的任务并追加到适当的dispatch queue中,GCD就能生成必要的线程并计划执行任务。由于线程管理师作为系统的一部分来实现的,因此可统一管理,也可执行任务,这样就比以前的线程更有效率。

  也就是说GCD用我们难以置信的非常简单的记述方法,实现了极为复杂的多线程编程,可以说这是一项划时代的技术。下面是使用了GCD源码的例子,虽然稍微抽象,但从中也能感受到GCD的威力

dispatch_async(queue,^{
   /*
      长时间处理
      例如AR用画像识别
      例如数据库访问
    */ 

   /*长时间处理结束主线程处理结果*/

    dispatch_asycn(dispatch_get_main_queue(),^{

       /*在主线程更新UI界面*/
    });
});

上面的就是在后台线程中执行长时间处理,处理结束使用主线程处理结果

dispatch_async(queue,^{ });

这仅有一行代码就表示让处理在后台线程中执行

dispatch_asycn(dispatch_get_main_queue(),^{

       /*在主线程更新UI界面*/
    });    

这样,仅此一行代码就能够让处理在主线程中执行,另外GCD使用到了block,进一步的简化了应用程序的代码

在导入GCD之前,cocoa框架提供了NSObject类的performSelectorInBackground:withObject实例方法和performSelectorOnMainThread实例方法等简单的多线程编程技术。例如,可以改用performSelector系方法来实现前面的GCD的源码看看

//执行后台线程
-(void)launchThreadByNSObject_performSelectorInBackground_withObject
{
   [self performSelectorInBackground:@selector(doWork) withObject:nil];
}
//后台线程方法
-(void)doWork
{
   NSAutoreleasePool *pool=[[NSAutoreleasePool alloc]init];
    /*长时间处理*/

    //处理结束,主线程更新
   [self performSelectorOnMainThread:@selector(doneWork) withObject:nil waitUntilDone:NO];

   [pool drain];
}

//主线程处理方法
-(void)doneWork
{
     //更新UI界面等操作
}

深入IOS多线程 GCD(一)

时间: 2024-12-24 21:56:16

深入IOS多线程 GCD(一)的相关文章

iOS多线程 GCD

iOS多线程 GCD Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main queue,通过dispatch_get_main_queue获取. /*! * @function dispatch_get_main_queue * * @abstract * Returns the default queue that is bound to the main thread. *

iOS多线程GCD

Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main queue,通过dispatch_get_main_queue获取. /*! * @function dispatch_get_main_queue * * @abstract * Returns the default queue that is bound to the main thread. * * @discussi

IOS 多线程GCD的使用[转载于新浪微博, 原作者:太阳石]

原文 在红黑联盟上看到一篇关于多线程GCD的教程文章,写的深入浅出,特转载于此,以备不时之需.原文链接另:补充两个GCD代码,都是Xcode snippet里面提供的:1.Dispatch After主要用于延迟执行一些代码.例子: int64_t delayInSeconds = 1.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); dispatch_aft

iOS 多线程GCD的基本使用

<iOS多线程简介>中提到:GCD中有2个核心概念:1.任务(执行什么操作)2.队列(用来存放任务) 那么多线程GCD的基本使用有哪些呢? 可以分以下多种情况: 1.异步函数 + 并发队列 /** * 异步函数 + 并发队列:可以同时开启多条线程 */ - (void)asyncConcurrent { // 1.创建一个并发队列 // dispatch_queue_create(const char *label, dispatch_queue_attr_t attr); // label

iOS 多线程 GCD part3:API

https://www.jianshu.com/p/072111f5889d 2017.03.05 22:54* 字数 1667 阅读 88评论 0喜欢 1 0. 预备知识 GCD对时间的描述有些新奇 #define NSEC_PER_SEC 1000000000ull #define NSEC_PER_MSEC 1000000ull #define USEC_PER_SEC 1000000ull #define NSEC_PER_USEC 1000ull MSEC:毫秒 USEC:微秒 NSE

iOS多线程——GCD篇

什么是GCD GCD是苹果对多线程编程做的一套新的抽象基于C语言层的API,结合Block简化了多线程的操作,使得我们对线程操作能够更加的安全高效. 在GCD出现之前Cocoa框架提供了NSObject类的 performSelectorInBackground:withObject performSelectorOnMainThread 方法来简化多线程编程技术. GCD可以解决以下多线程编程中经常出现的问题:1.数据竞争(比如同时更新一个内存地址) 2.死锁(互相等待) 3.太多线程导致消耗

iOS多线程GCD的简单使用

在iOS开发中,苹果提供了三种多线程技术,分别是: (1)NSThread (2)NSOperation (3)GCD 简单介绍一下GCD的使用. GCD全称 Grand Central Dispatch,可以称之为大中央调度.实际上GCD是管理着一个线程池,如何创建线程,如何回收线程,以及分配多少个线程,这些都是GCD来控制的.在开发中,程序员是不用操作线程的相关事情,程序员只需要把应该做的操作放到相应的队列里面即可. 一:自定义队列 GCD中有多种队列,其中自定义的队列有两种:串行队列和并行

ios多线程-GCD基本用法

ios中多线程有三种,NSTread, NSOperation,GCD 这篇就讲讲GCD的基本用法 平时比较多使用和看到的是: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //异步操作代码块 dispatch_async(dispatch_get_main_queue(), ^{ //回到主线程操作代码块 }); }); 比较多的用于更新ui操作 比如从数据库获取数据需要花较长的

关于ios多线程GCD的简单介绍

很久没写博客了,实在太忙了,没有时间写.现在终于空闲下来了,今天就给大家介绍下ios开发里GCD的用法. 刚开始学习的新手,或许对多线程很迷茫,那么什么是线程呢?其实很简单,不要想那么复杂. 1.我们通常知道进程,就是正在执行中的程序,每个进程有自己独立的内存空间,进程之间互相不干涉.(就比如你打开微信) 2.什么是线程?线程是进程执行的基本单元.进程中的任务是在线程中执行的,进程在启动后会自动蜕化为主线程(ios UI Main thread),然后在执行任务. 3.线程的串航执行,比如我要下