GCD API 总结(原创)

Dispatch Queue即 执行处理的等待队列。

存在两种Dispatch Queue,即

Serial Dispatch Queue 等待现在的处理(串行队列)

Concurrent Dispatch Queue 不等待现在的处理(并发队列)并行处理的数量取决于当前系统的状态,不能像operationQueue一样设置最大数量。

 

1.dispatch_queue_create("com.gcd.test",Null)

创建Dispatch queue,都是Default Priority

DISPATCH_QUEUE_SERIAL

DISPATCH_QUEUE_CONCURRENT

- (void)tsGCD

{

    dispatch_queue_t queue = dispatch_queue_create("com.gcd.test", DISPATCH_QUEUE_CONCURRENT);

    NSMutableArray *array = [[NSMutableArray alloc]init];

    for (int i = 0; i < 100000; i++) {

        dispatch_async(queue, ^{

            [array addObject:[NSNumber numberWithInt:i]];

        });

    }

    NSLog(@"done");

}

 

当为DISPATCH_QUEUE_CONCURRENT,数组AddObject非线程安全,同时访问容易引起问题,

gcdTest(2484,0x11395b000) malloc: *** error for object 0x7f9c8b802e00: pointer being freed was not allocated

*** set a breakpoint in malloc_error_break to debug

当为DISPATCH_QUEUE_SERIAL时,线程有序进行,不会引起并发问题。

 

系统提供两种快速获取的Dispatch Queue,

Main Dispatch Queue (主线程,是 Serial Dispatch Queue)

Global Dispatch Queue (Concurrent Dispatch Queue)

Global Dispatch Queue 提供4个执行优先级,HIGH DEFAULT LOW BACKGROUND

2.dispatch_get_main_queue();

3.dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0);

 

4.dispatch_set_target_queue(destinqueue,fromqueue);

1.改变dispatch queue 执行优先级

2.多个Serial Dispatch Queue 防止并行执行,实现Dispatch Queue 的执行阶层。

 

5.dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW,3ull*NSEC_PER_SEC);

dispatch_after(time,queue);

并不是在指定时间后执行处理,而只是在指定时间追加处理到Dispatch queue

 

6.dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group,queue,^{NSLog(@"blk0");});

dispatch_group_notify(group,dispatch_get_main_queue(),^{NSLog(@"done");});

dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW,3ull*NSEC_PER_SEC);

dispatch_group_wait(group,time);可以通过返回值判断指定时间后group是否结束。

追加到Dispatch Queue 中的多个处理全部结束后想执行结束处理。

 

7.dispatch_barrier_async

dispatch_barrier_sync

障碍

 

8.dispatch_sync(queue,block)

dispatch_async(queue,block)

执行queue

posted on 2014-12-05 10:03  Jason_Luo  阅读(317)  评论(0)    收藏  举报

导航