• 多线程经常使用的函数


     

    #import "ViewController.h"

    #import "LZJPerson.h"

    @interface ViewController ()

     

    @end

     

    @implementation ViewController

     

     - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

    {

    //    [self delay];

        LZJPerson *P1 = [[LZJPerson alloc]init];

        LZJPerson *P2 = [[LZJPerson alloc]init];

        NSLog(@"%@------%@",P1.book,P2.book);

     

    }

     

    - (void)delay{

     

        NSLog(@"start---");

    //    1.延迟执行的第一种方法

    //    [self performSelector:@selector(task) withObject:nil afterDelay:2.0];

        

    //    2.延迟执行的第二种方法

    //    [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(task) userInfo:nil repeats:YES];

        

    //    第三种 GCD

    // dispatch_queue_t queue =  dispatch_get_main_queue();

        dispatch_queue_t queue =dispatch_get_global_queue(0, 0);

        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)),queue , ^{

            NSLog(@"GCD---%@",[NSThread currentThread]);

            

        });

        

    }

    //一次性代码----注意不能放在懒加载里面使用 

    - (void)once{

     

        static dispatch_once_t onceToken;

        dispatch_once(&onceToken, ^{

            NSLog(@"------hello");

        });

     

    }

     

    - (void)task{

     

        NSLog(@"task---%@",[NSThread currentThread]);

     

    }

     

     

    GCD中还有个用来执行任务的函数:

    dispatch_barrier_async(dispatch_queue_t queue, dispatch_block_t block);

    在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行

    这个queue不能是全局的并发队列

    @end

  • 相关阅读:
    [数据结构与算法]Note
    [C++]构造函数那些事
    [C++]constexpr函数
    [计算机系统]字/字节/位
    [C++]返回数组指针
    [C++]Top-level const/Low-level const
    [信号]预加重与去加重--转
    Smart solution of decode String
    ACE学习:
    模糊匹配算法
  • 原文地址:https://www.cnblogs.com/liuzhenjie/p/5202877.html
Copyright © 2020-2023  润新知