您的位置:首页 > 移动开发 > IOS开发

IOS GCD一般使用

2015-12-24 14:54 513 查看
一、异步执行:

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-");



});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: