/*!
* @brief GCD方法
*/
- (void)GCDMethod
{
//后台执行
dispatch_async(dispatch_get_global_queue(0, 0), ^{
});
//主线程执行
dispatch_async(dispatch_get_main_queue(), ^{
});
//一次性执行
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
});
//延迟几秒
double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^{
//[self CommonMethod1];
});
//高级用法让后台 2 个线程并行执行,然后等 2 个线程都结束后,再汇总执行结果。这个可以用 dispatch_group, dispatch_group_async 和 dispatch_group_notify 来实现,
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
[self CommonMethod1];
});
dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
[self CommonMethod2];
});
dispatch_group_notify(group, dispatch_get_global_queue(0, 0), ^{
[self CommonMethod1];
});
}
/*!
* @brief 案例测试
*/
- (void)GCDEmgTest{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSURL *url = [NSURL URLWithString:@"http://www.youdao.com"];
NSError *error;
NSString *data = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
if (data != nil) {
dispatch_async(dispatch_get_main_queue(), ^{
[self CommonMethod1];
//NSLog(@"%@",data);
});
}
});
}
- (void)CommonMethod1
{
static NSInteger i = 1;
NSLog(@"CommonMethod1第%ld葫芦娃",++i);
}
- (void)CommonMethod2
{
static NSInteger i = 2;
NSLog(@"CommonMethod2第%ld葫芦娃",++i);
}