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-");
});
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-");
});
相关文章推荐
- AFNetworking 新版本3.0的迁移(最新为3.0.4)
- iOS 控制section不悬停 --- iOS开发系列 ---项目中成长的知识八
- iOS 修改通用的返回图片
- IOS-IOS录音功能的实现
- iOS 深入理解RunLoop
- iOS学习之 Xcode设置项之Architectures和Valid Architectures
- 自定义相机,人脸追踪
- (NO.00005)iOS实现炸弹人游戏(四):游戏数据的初始化(一)
- (NO.00005)iOS实现炸弹人游戏(四):游戏数据的初始化(一)
- (NO.00005)iOS实现炸弹人游戏(四):游戏数据的初始化(一)
- IOS版添加phonegap--插件写法教程
- 苹果开发者认证 步骤
- Orientation - 2
- iOS 教你写单例
- iOS 使用百度地图SDK显示网格问题
- iOS设计模式--迭代器模式
- Undefined symbols for architectureIOS
- tableView分割线从头开始
- iOS 判断定位是否允许_跳转定位设置界面
- ios问题集