iOS 线程之GCD的高级用法
2014-11-11 17:58
204 查看
之前的一篇关于线程的blog已经为大家介绍了GCD的简单使用方式及例子说明,今天由于项目中有特殊的应用GCD的实例,为大家介绍两种特殊需求的使用GCD的方法。
目的:实现一件事情做完,再做下一件事情,确保函数的执行周期。
解决方案:提供以下2种解决方案
1、创建barrier等待线程
dispatch_async(dispatch_get_main_queue(), ^{
[self ActionFirst];
});
dispatch_barrier_async(dispatch_get_main_queue(), ^{
[self ActionNext];
});
2、创建group线程组(即 队列queue)
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_main_queue(), ^{
[self ActionFirst];
});
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
[self ActionNext];
});
出现问题的代码如下:
-(void)example
{
[self ActionFirst];
[self ActionNext];
}
产生原因:调用example函数时,由于ActionFirst函数执行的时间比较长,当ActionNext函数执行完时,ActionFirst可能还没有执行完,导致执行ActionNext时出现崩溃的现象。
目的:实现一件事情做完,再做下一件事情,确保函数的执行周期。
解决方案:提供以下2种解决方案
1、创建barrier等待线程
dispatch_async(dispatch_get_main_queue(), ^{
[self ActionFirst];
});
dispatch_barrier_async(dispatch_get_main_queue(), ^{
[self ActionNext];
});
2、创建group线程组(即 队列queue)
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_main_queue(), ^{
[self ActionFirst];
});
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
[self ActionNext];
});
出现问题的代码如下:
-(void)example
{
[self ActionFirst];
[self ActionNext];
}
产生原因:调用example函数时,由于ActionFirst函数执行的时间比较长,当ActionNext函数执行完时,ActionFirst可能还没有执行完,导致执行ActionNext时出现崩溃的现象。
相关文章推荐
- iOS 多线程 GCD(滚床单) 的高级用法
- iOS 线程之GCD的等待继续用法
- iOS 线程之GCD的高级使用方法
- ios gcd简单用法
- IOS 高级语法与设计模式5(5.2 延展的基本概念及用法)
- iOS开发——多线程、NSThread、gcd、线程间通信
- 粗糙的iOS笔记之线程—GCD
- dispatch_sync 线程 GCD iOS
- IOS线程数据篇2之多线程:NSThread NSOperation GCD(一)
- iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值)
- IOS 高级语法与设计模式5(5.3 协议的基本概念及用法)
- ios中webview的高级用法
- iOS线程开发之--BLOCK & GCD(Grand Central Dispatch)
- iOS多线程_05_线程间通信NSThread/GCD
- iOS多线程_06_GCD其它用法
- IOS 高级语法与设计模式5(5.1 类目的基本概念与用法)
- IOS中线程的处理(GCD,NSOperation,NSOperationQueue)
- IOS-线程异步操作GCD
- iOS中的线程的总结和GCD
- iOS开发:界面之间传值之Block传值(Block高级用法:Block传值)