IOS GCD一般使用

一、异步执行:

dispatch_async(dispatch_get_global_queue(0, 0), ^{

        //执行代码

    });


二、延时执行:

dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC);

    dispatch_after(time, dispatch_get_main_queue(), ^{

        //执行代码

    });


三、重复执行:

(1)可控,间隔执行

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

        dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);

        dispatch_source_set_timer(timer,dispatch_walltime(NULL, 0),2.0*NSEC_PER_SEC, 0); //每2秒执行

        dispatch_source_set_event_handler(timer, ^{

//执行代码

        });

        dispatch_resume(timer);

(2)不可控,相当于for

dispatch_apply(4, dispatch_get_global_queue(0, 0), ^(size_t index) {

        NSLog(@"--%d-",index);

//执行代码

    });


四、单例

+ (ClassName *)shareInstance {

dispatch_once_t token;

    ClassName *once;

    dispatch_once(&token, ^{

        once = [[ClassName alloc]init];

    });

return once;



五、阻拦

下面打印--1- 与--2-时异步,当他们都打印完了才执行--3-,最后才执行--4-和--5-,他们也异步。

dispatch_queue_t queue = dispatch_queue_create("my queue"DISPATCH_QUEUE_CONCURRENT);

    dispatch_async(queue, ^{

        //执行代码

        NSLog(@"--1-");

        NSLog(@"--1-");

        NSLog(@"--1-");

        NSLog(@"--1-");

        NSLog(@"--1-");

        NSLog(@"--1-");

        NSLog(@"--1-");

        NSLog(@"--1-");

        NSLog(@"--1-");

    });

    dispatch_async(queue, ^{

        //执行代码

        NSLog(@"--2-");

        NSLog(@"--2-");

        NSLog(@"--2-");

        NSLog(@"--2-");

        NSLog(@"--2-");

        

    });

    

    dispatch_barrier_async(queue, ^{

        NSLog(@"--3-");

    });

    

    dispatch_async(queue, ^{

        //执行代码

        NSLog(@"--4-");

        NSLog(@"--4-");

        NSLog(@"--4-");

        NSLog(@"--4-");

        NSLog(@"--4-");

        

    });

dispatch_async(queue, ^{

        //执行代码

        NSLog(@"--5-");

        NSLog(@"--5-");

        NSLog(@"--5-");

        NSLog(@"--5-");

        NSLog(@"--5-");

        

    });


你可能感兴趣的:(gcd)