【读书笔记】GCD
一,Dispatch Queue
dispatch_async(queue, ^{ /* *想执行的任务 */ });
其中queue分为两种:
1,Serial Dispatch Queue 等待现在执行中处理结束。
2,Concurrent Dispatch Queue 不等待现在执行中处理结束。
二,dispatch_queue_create
用于生成queue.
1,生成Serial Dispatch Queue.
dispatch_queue_t mySerialDispatchQueue=dispatch_queue_create("com.example.gcd.MySerialDispatchQueue", NULL);
2,生成Concurrent Dispatch Queue。
dispatch_queue_t myConcurrentDispatchQueue=dispatch_queue_create("com.example.gcd.MyConcurrentDispatchQueue", DISPATCH_QUEUE_CONCURRENT);
3,用法
dispatch_queue_t myConcurrentDispatchQueue=dispatch_queue_create("com.example.gcd.MyConcurrentDispatchQueue", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(myConcurrentDispatchQueue, ^{
NSLog(@"block on myConcurrentDispatchQueue");
});
三,Main Dispatch Queue/Global Dispatch Queue
1,Main Dispatch Queue.
在主线程中执行的Dispatch Queue.
//Main Dispatch Queue的获取方法 dispatch_queue_t mainDisaptchQueue=dispatch_get_main_queue() ;
2,Global Dispatch Queue.
在所有应用程序中都能够使用的Dispatch Queue.它有4个优先级。
//Global Dispatch Queue的获取方法 //高优先级 dispatch_queue_t globalDispatchQueueHigh=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); //默认优先级 dispatch_queue_t globalDispatchQueueDefault=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //低优先级 dispatch_queue_t globalDispatchQueueLow=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0); //后台优先级 dispatch_queue_t globalDispatchQueueBackground=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
3,用法
//在默认优先级的Global Dispatch Queue中执行block dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ /* *可并行执行的处理 */ dispatch_async(dispatch_get_main_queue(), ^{ /* *只能在主线程中执行的处理 */ }); });
四,dispatch_set_target_queue
用于变更Dispatch Queue的生成。
//在后台执行动作处理的Serial Dispatch Queue的生成方法 dispatch_queue_t mySerialDispatchQueue=dispatch_queue_create("com.example.gcd.MySerialDispatchQueue", NULL); dispatch_queue_t globalDispatchQueueBackground=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0); dispatch_set_target_queue(mySerialDispatchQueue, globalDispatchQueueBackground);
五,dispatch_after
指定时间后执行处理。
1,ull是C语言的数值字面量,是显示表示类型时使用的字符串(表示“unsigned long long ”)。如果使用NSEC_PER_MSEC则可以以毫秒为单位计算。如果使用NSEC_PER_SEC则为毫微秒的数值。
2,dispatch_time_t计算相对时间。dispatch_walltime用于计算绝对时间。
在3秒后将指定的Block追加到Main Dispatch Queue.
dispatch_time_t time=dispatch_time(DISPATCH_TIME_NOW, 3ull*NSEC_PER_SEC); dispatch_after(time, dispatch_get_main_queue(), ^{ NSLog(@"waited at least three seconds."); });
六,Dispatch Group
无论向什么样的Dispatch Queue中追加处理,使用Dispatch Group都可以监视这些处理执行的结束。一旦检测到所有执行结束,就可将结束的处理追加到Dispatch Queue中。这就是使用Dispatch Group的原因。
1,追加3个Block到Global Dispatch Queue,这些Block如果全部执行完毕,就会执行Main Dispatch Queue中结束处理用的Block.
//追加3个Block到Global Dispatch Queue,这些Block如果全部执行完毕,就会执行Main Dispatch Queue中结束处理用的Block. dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_group_t group=dispatch_group_create(); dispatch_group_async(group, queue, ^{ NSLog(@"blk0"); }); dispatch_group_async(group, queue, ^{ NSLog(@"blk1"); }); dispatch_group_async(group, queue, ^{ NSLog(@"blk2"); }); dispatch_group_notify(group, dispatch_get_main_queue(), ^{ NSLog(@"done"); });
2,在Dispatch Group中使用dispatch_group_wait函数等待全部处理执行结束。
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/66853.html