iOS多线程的使用
来源:互联网 发布:淘宝客定向计划公开 编辑:程序博客网 时间:2024/05/29 09:34
主队列:专门负责在主线程上调度任务,不会在子线程上调度任务,在主队列不允许开新线程。
主队列的特点:只在主线程运行,不开新线程。
异步执行:会开新线程,在新线程执行。
异步执行特点:不需要马上执行。
异步主队列:不会开辟新线程,只在主线程上顺序执行。
异步主队列的特点:主队列上的任务不会马上执行而是只把任务放到主队列,等线程有空时才去执行。
同步执行特点:不会开辟新线程,会马上执行。
2. 全局队列能供所有的应用程序共享。
3. 在MRC开发中,全局队列不需要释放,但是并发队列需要释放。
二者调度任务的方式相同。
注意:并发队列有名称,可以方便系统运行出错时根据队列名称在日志中进行查找。
GCD默认已经提供了全局的并发队列,供整个应用使用,不需要手动创建。使用dispatch_get_global_queue函数获取全局的并发队列。
dispatch_queue_t dispatch_get_global_queue(dispatch_queue_priority_t priority, unsigned long flags);
priority: 队列的优先级设为0即可 flags:此参数暂时无用,用0即可。举例如下:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // 获得全局并发队列
全局并发队列的优先级:
#define DISPATCH_QUEUE_PRIORITY_HIGH 2 // 高
#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0 // 默认(中)
#define DISPATCH_QUEUE_PRIORITY_LOW (-2) // 低
#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN // 后台
GCD中获取串行队列有2种路径
使用dispatch_queue_create函数创建串行队dispatch_queue_t
dispatch_queue_create(const char *label, // 队列名称
dispatch_queue_attr_t attr // 队列属性,如果是串行就传NULL
);具体使用如下:
dispatch_queue_t queue =dispatch_queue_create(“aaa”,NULL); // 创建串行队列
dispatch_release(queue); // 非ARC需要释放手动创建的队列。
使用主队列(跟主线程相关联的队列)
主队列是GCD自带的一种特殊的串行队列。
放到主队列中的任务,都会放到主线程中执行。
使用dispatch_get_main_queue()获得主队列
主队列的特点:只在主线程运行,不开新线程。
异步执行:会开新线程,在新线程执行。
异步执行特点:不需要马上执行。
异步主队列:不会开辟新线程,只在主线程上顺序执行。
异步主队列的特点:主队列上的任务不会马上执行而是只把任务放到主队列,等线程有空时才去执行。
同步执行特点:不会开辟新线程,会马上执行。
主队列同步执行特点:会因为主队列和所在方法的相互等待造成死锁,引起线程阻塞。
全局队列与并发队列的区别:
1. 全局队列没有名称,并发队列有名称。2. 全局队列能供所有的应用程序共享。
3. 在MRC开发中,全局队列不需要释放,但是并发队列需要释放。
二者调度任务的方式相同。
注意:并发队列有名称,可以方便系统运行出错时根据队列名称在日志中进行查找。
GCD默认已经提供了全局的并发队列,供整个应用使用,不需要手动创建。使用dispatch_get_global_queue函数获取全局的并发队列。
dispatch_queue_t dispatch_get_global_queue(dispatch_queue_priority_t priority, unsigned long flags);
priority: 队列的优先级设为0即可 flags:此参数暂时无用,用0即可。举例如下:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // 获得全局并发队列
全局并发队列的优先级:
#define DISPATCH_QUEUE_PRIORITY_HIGH 2 // 高
#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0 // 默认(中)
#define DISPATCH_QUEUE_PRIORITY_LOW (-2) // 低
#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN // 后台
GCD中获取串行队列有2种路径
使用dispatch_queue_create函数创建串行队dispatch_queue_t
dispatch_queue_create(const char *label, // 队列名称
dispatch_queue_attr_t attr // 队列属性,如果是串行就传NULL
);具体使用如下:
dispatch_queue_t queue =dispatch_queue_create(“aaa”,NULL); // 创建串行队列
dispatch_release(queue); // 非ARC需要释放手动创建的队列。
使用主队列(跟主线程相关联的队列)
主队列是GCD自带的一种特殊的串行队列。
放到主队列中的任务,都会放到主线程中执行。
使用dispatch_get_main_queue()获得主队列
dispatch_queue_t queue = dispatch_get_main_queue();
各种队列的执行效果如下图所示:
代码运行如下:
运行结果如下:
主队列异步执行如下:
主队列同步执行如下:
gcd同步任务执行如下:
全局并发队列执行异步任务如下:
0 0
- iOS多线程的使用
- iOS 多线程的使用
- iOS GCD 多线程的使用
- iOS 多线程GCD的使用
- iOS 多线程的使用情况
- iOS中多线程的使用
- iOS多线程NSOperation的使用
- iOS多线程的基本使用
- iOS中多线程的使用
- iOS 多线程的部分使用
- ios中多线程的使用
- iOS 多线程下的NStimer 的使用
- 多线程的使用(4) - iOS多线程的三种方式
- 多线程的使用(4) - iOS多线程的三种方式
- 多线程的使用(4) - iOS多线程的三种方式
- iOS多线程 - NSThread锁的使用(多线程资源共享的问题)
- iOS多线程编程之NSThread的使用
- IOS多线程编程之NSThread的使用
- POJ 2531 Network Saboteur(DFS)
- 关于安卓屏幕划分的知识
- [LEETCODE] 268. Missing Number
- HDU 4458 Shoot the Airplane(计算几何or数学)
- linux gdb调试
- iOS多线程的使用
- Android Activity与Service的AIDL接口通讯
- Windows HelloWorld驱动应用
- 习题18 命名、变量、代码和函数
- pg源码阅读四
- er tong liulanqi chorme
- 剑指offer 33题 【时间空间效率的平衡】把数组排成最小的数
- jQuery插件记录 <三>使用$.fn添加jQuery对象方法中传递options给定默认值
- Ant安装