Grand Central Dispatch简称GCD 解决多核并行运算的一种方案
看代码就行:
// Grand CentralDispatch简称GCD技术
// Do any additional setup after loading the view.
// dispatch_queue_t newDispath =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
// dispatch_async(newDispath, ^{
// [selfdownloadImage];
// });
// #defineDISPATCH_QUEUE_PRIORITY_HIGH 2
// #defineDISPATCH_QUEUE_PRIORITY_DEFAULT 0
// #defineDISPATCH_QUEUE_PRIORITY_LOW (-2)
// #defineDISPATCH_QUEUE_PRIORITY_BACKGROUNDINT16_MIN
/*dispatch queue分为下面三种:
* Serial:又称为private dispatch queues,同时只执行一个任务。Serial queue通常用于同步访问特定的资源或数据。当你创建多 个 Serial queue时,虽然它们各自是同步执行的,但Serial queue与Serial queue之间是并发执行的。
* Concurrent: 又称为global dispatch queue,可以并发地执行多个任务,但是执行完成的顺序是随机的。
* Main dispatchqueue它是全局可用的serial queue,它是在应用程序主线程上执行任务的
*/
// 一般GCD 可以如下操作
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{
// 耗时的操作
dispatch_async(dispatch_get_main_queue(), ^{
// 更新界面
});
});
[selfexampleDispatch];
/*
*系统给每一个应用程序提供了三个concurrent dispatch queues。
*这三个并发调度队列是全局的,它们只有优先级的不同。
*因为是全局的,我们不需要去创建。我们只需要通过使用函数dispath_get_global_queue去得到队列
*/
dispatch_queue_tglobalQ =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
NSLog(@"global:%p",globalQ);
dispatch_queue_t mainQ =dispatch_get_main_queue();
NSLog(@"mainQ:%p",mainQ);
/*
*虽然dispatch queue是引用计数的对象,但是以上两个都是全局的队列,不用retain或release。
*/
/*
*dispatch_group_async可以实现监听一组任务是否完成,完成后得到通知执行其他的操作。
*这个方法很有用,比如你执行三个下载任务,当三个任务都下载完成后你才通知界面说完成的了。
*/
timeInt = 0;
[NSTimerscheduledTimerWithTimeInterval:1
target:self
selector:@selector(checkingTime)
userInfo:nil
repeats:YES];
[selfexampleDispath_group];
/*dispatch_barrier_async的使用
*dispatch_barrier_async是在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行
*/
[selfexampleDispatch_barrier];
/*dispatch_apply
*执行某个代码片段N次。
*/
dispatch_apply(5, globalQ, ^(size_t index) {
// 执行5次
});