zoukankan      html  css  js  c++  java
  • GCD应用及其他方法

    1.GCD应用 单例模式
       
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
       
            NSLog(@"执行一次%@",[NSThread currentThread]);
           

        });

    2.延迟操作
        //1、
        NSLog(@"开始执行");
       
        //    [self performSelector:@selector(handleAction) withObject:nil afterDelay:0];
       
        //2、
       
        //DISPATCH_TIME_NOW 从现在开始
        //delayInSeconds 延迟几秒
       
        dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC));
       
        //    when dispatch_time_t
       
        dispatch_after(time, dispatch_get_main_queue(), ^{
           
            NSLog(@"%@",[NSThread currentThread]);
           
        });

    3.调度组

    //创建调度组
        dispatch_group_t group = dispatch_group_create();
        //获取全局队列
        dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
        //调度组的异步请求
        dispatch_group_async(group, queue, ^{
           
            [NSThread sleepForTimeInterval:2];
            NSLog(@"下载第一张图");
        });
        dispatch_group_async(group, queue, ^{
            [NSThread sleepForTimeInterval:3];
           
            NSLog(@"下载第二张图");
        });
        dispatch_group_async(group, queue, ^{
            [NSThread sleepForTimeInterval:1];
           
            NSLog(@"下载第三张图");
        });
        dispatch_group_async(group, queue, ^{
            [NSThread sleepForTimeInterval:5];
           
            NSLog(@"下载第四张图");
        });
        //notify通知,当所有异步请求完成时调用dispatch_group_notify
        dispatch_group_notify(group, queue, ^{
            NSLog(@"更新UI");
        });

    4.调度组的第二种方式

    //创建调度组
        dispatch_group_t group = dispatch_group_create();
        //获取全局队列
        dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
       
        //进入队列
        dispatch_group_enter(group);
        dispatch_async(queue, ^{
           
            [NSThread sleepForTimeInterval:2];
            NSLog(@"下载第一张图");
           
            //离开队列
            dispatch_group_leave(group);
        });
       
        dispatch_group_enter(group);
        dispatch_async(queue, ^{
           
            [NSThread sleepForTimeInterval:1];
            NSLog(@"下载第er张图");
           
            dispatch_group_leave(group);
        });
       
        dispatch_group_enter(group);
        dispatch_async(queue, ^{
           
            [NSThread sleepForTimeInterval:3];
            NSLog(@"下载第san张图");
           
            dispatch_group_leave(group);
        });
       
        //等待调度队列wait相当于一个阻塞状态 等最后一个异步进程执行后,更新UI才执行
        dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
       
        NSLog(@"更新UI");
     

    5.中断操作

    //dispatch_barrier_async一定是自定义队列
        //这里指定的并发队列应该是自己通过dispatch_queue_create函数创建的。如果你传的是一个串行队列或者全局并发队列,这个函数等同于dispatch_async函数。
       
        dispatch_queue_t queue = dispatch_queue_create("com.blogcn", DISPATCH_QUEUE_CONCURRENT); //dispatch_get_global_queue(0, 0);
       
        dispatch_async(queue, ^{
            [NSThread sleepForTimeInterval:1];
            NSLog(@"1");
        });
       
        dispatch_async(queue, ^{
            [NSThread sleepForTimeInterval:3];
           
            NSLog(@"2");
        });
        dispatch_async(queue, ^{
           
            [NSThread sleepForTimeInterval:2];
           
            NSLog(@"3");
        });
       
        //中断操作dispatch_barrier_async
        dispatch_barrier_async(queue, ^{
            NSLog(@"--------");
            [NSThread sleepForTimeInterval:1];
           
        });
       
        dispatch_async(queue, ^{
           
            [NSThread sleepForTimeInterval:1];
            NSLog(@"4");
        });
        dispatch_async(queue, ^{
            NSLog(@"5");
        });
     

    6.遍历

    //遍历操作
        dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
        //iterations 遍历的次数
        dispatch_apply(5, queue, ^(size_t i) {
            NSLog(@"%@",@(i));
        });

    您的资助是我最大的动力!
    金额随意,欢迎来赏!

    如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的推荐按钮。
    如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的关注我

    如果,想给予我更多的鼓励,求打

    因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【往事亦如风】!

  • 相关阅读:
    uni-app 版本更新控制
    Chrome为什么打开一个页面,会有4个进程?
    vue 导航栏滚动吸顶
    vue 运行后, sass 报错
    HAProxy——HAProxy、Nginx、LVS优势劣势 (转)
    HAProxy——关于配置的备份
    RabbitMQ——用HAProxy实现负载均衡
    docker——Docker常见问题总结 (转)
    docker——docker容器内存和CPU使用限制
    docker——用docker-compose安装redis
  • 原文地址:https://www.cnblogs.com/ldnh/p/5280929.html
Copyright © 2011-2022 走看看