GCD常用方法

1.延迟操作

2.一次性代码

3.队列组

/**
 *  延迟执行
 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

 // 2秒后异步执行这里的代码...

 });

 延迟执行:不需要再写方法,且它还传递了一个队列,我们可以指定并安排其线程。

 如果队列是主队列,那么就在主线程执行,如果队列是并发队列,那么会新开启一个线程,在子线程中执行。
 */

-(void)test1 {
    NSLog(@"打印当前线程---%@",  [NSThread currentThread]);

         //延迟执行,第二种方式
          //可以安排其线程(1),主队列
          dispatch_queue_t queue= dispatch_get_main_queue();
         dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), queue, ^{
                 NSLog(@"主队列--延迟执行------%@",[NSThread currentThread]);
             });

         //可以安排其线程(2),并发队列
         //1.获取全局并发队列
         dispatch_queue_t queue1= dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        //2.计算任务执行的时间
         dispatch_time_t when=dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC));
         //3.会在when这个时间点,执行queue中的这个任务
         dispatch_after(when, queue1, ^{
                 NSLog(@"并发队列-延迟执行------%@",[NSThread currentThread]);
             });
}
/**
 *  2.使用dispatch_once一次性代码

 使用dispatch_once函数能保证某段代码在程序运行过程中只被执行1次

 static dispatch_once_t onceToken;

 dispatch_once(&onceToken, ^{

 // 只执行1次的代码(这里面默认是线程安全的)

 });

 整个程序运行过程中,只会执行一次。
 */

- (void)test2 {
    static dispatch_once_t onceToken;
         dispatch_once(&onceToken, ^{
                 NSLog(@"该行代码只执行一次");
             });
}
/**
 *  队列组
 */

- (void)test3 {

    dispatch_group_t group =  dispatch_group_create();

    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        // 执行1个耗时的异步操作

    });

    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        // 执行1个耗时的异步操作

    });

    dispatch_group_notify(group, dispatch_get_main_queue(), ^{

        // 等前面的异步操作都执行完毕后,回到主线程...(结果处理)

    });
}
时间: 2024-09-27 03:53:42

GCD常用方法的相关文章

小伙,多线程(GCD)看我就够了,骗你没好处!

多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能.具有这种能力的系统包括对称多处理机.多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器.再一个程序中,这些独立运行的程序片段叫做线程(Thread).利用它编程的概念就叫做多线程.具有多线程能力的计算机因有硬

iOS 面试常问之多线程

本片围绕多线程全面展开叙述. 1.为什么要有多线程/多线程是用来干什么的? 2.多线程是什么? 3.如何创建多线程? 4.多线程在哪些情况下会使用/多线程使用场景? 5.三种多线程的优缺点? 1.为什么要有多线程/多线程是用来干什么的? 每个iOS应用程序都有个专门用来更新显示UI界面.处理用户的触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来极坏的用户体验.一般的解决方案就是将那些耗时的操作放到另外一个线程中去执行,多线程编程是防止主线程

关于GCD的常用方法介绍,MRC

1.GCD的简单介绍 GCD全称Great Center Dispatch,我们可以给它起个‘滚床单’名字,便于更好的记忆 GCD是由苹果公司开发的技术.是为了优化应用程序,支持多核心处理器和其他的对称多处理系统的系统 GCD属于函数级的多线程,运用的是C语言(大部分接触的是block块),性能更高,功能也更加强大. GCD首次发布在Mac OS X10.6,iOS4及以上也可以用. 2.CGD的2个核心 1)任务:具有一定功能的代码段. 主要分为同步任务和异步任务 同步任务:不管在哪种类型的队

gcd 控制线程执行顺序(供参考)

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_

[编写高质量iOS代码的52个有效方法](十)Grand Central Dispatch(GCD)

[编写高质量iOS代码的52个有效方法](十)Grand Central Dispatch(GCD) 参考书籍:<Effective Objective-C 2.0> [英] Matt Galloway 先睹为快 41.多用派发队列,少用同步锁 42.多用GCD,少用performSelector系列方法 43.掌握GCD及操作队列的使用时机 44.通过Dispatch Group机制,根据系统资源状况来执行任务 45.使用dispatch_once来执行只需要运行一次的线程安全代码 46.不

iOS多线程开发--NSThread NSOperation GCD

多线程 当用户播放音频.下载资源.进行图像处理时往往希望做这些事情的时候其他操作不会被中 断或者希望这些操作过程中更加顺畅.在单线程中一个线程只能做一件事情,一件事情处理不完另一件事就不能开始,这样势必影响用户体验.早在单核处理器时期 就有多线程,这个时候多线程更多的用于解决线程阻塞造成的用户等待(通常是操作完UI后用户不再干涉,其他线程在等待队列中,CPU一旦空闲就继续执行, 不影响用户其他UI操作),其处理能力并没有明显的变化.如今无论是移动操作系统还是PC.服务器都是多核处理器,于是“并行

iOS-多线程--(pthread/NSThread/GCD/NSOperation)--总结

零.线程的注意点(掌握)1.不要同时开太多的线程(1~3条线程即可,不要超过5条)2.线程概念1> 主线程 : UI线程,显示.刷新UI界面,处理UI控件的事件2> 子线程 : 后台线程,异步线程3.不要把耗时的操作放在主线程,要放在子线程中执行 一.NSThread(掌握)1.创建和启动线程的3种方式1> 先创建,后启动// 创建NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(dow

GCD的部分总结

GCD是基于C语言的底层API,用Block定义任务用起来非常灵活便捷. GCD的基本思想是就将操作放在队列中去执行 (1)操作使用Blocks定义 (2)队列负责调度任务执行所在的线程以及具体的执行时间 (3)队列的特点是先进先出(FIFO)的,新添加至对列的操作都会排在队尾 关于多线程的一些概念: GCD一共有5种队列:main queue :主队列,在主队列中只有一个主线程,本质也是一个串行队列 high priority queue:高优先级队列 low priority queue :

GCD的一些小结

GCD是基于C语言的底层API,用Block定义任务用起来非常灵活便捷. GCD的基本思想是就将操作放在队列中去执行 (1)操作使用Blocks定义 (2)队列负责调度任务执行所在的线程以及具体的执行时间 (3)队列的特点是先进先出(FIFO)的,新添加至对列的操作都会排在队尾 关于多线程的一些概念: GCD一共有5种队列:main queue :主队列,在主队列中只有一个主线程,本质也是一个串行队列 high priority queue:高优先级队列 low priority queue :