主线程:UI线程, 显示、刷新UI界面,处理UI控件的事件安全
2、线程同步并发
1.实质:为防止多个线程抢夺同一个资源在成的数据安全问题异步
2.实现:给代码加一个互斥锁。async
3、GCD函数
1.队列和任务spa
1>任务:须要执行什么操做 用block来封装任务线程
2>队列存听任务code
全局并发队列:能够让任务并发执行orm
dispatch_queue_t queue = dispatch_global_queue(IDSPATCH_QUEUE_PRIORITY_DEFAULT,0);队列
本身建立的串行队列:让任务一个接一个执行
dispatch_queue_t queue = dispatch_queue_create("cn.yan.queue",NULL);
主队列:让任务在主线程执行
dispatch_queue_t queue = dispatch_get_main_queue();
2.执行任务的函数
1》同步执行:不具有开启新线程的能力
dispatch_sync
2》异步执行:具有开启新线程的能力
dispatch_async
3.常见组合
1>dispatch_async +全局并发队列
2>dispatch_async+本身建立的串行队列
4.线程间的通讯(掌握)
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{
全局并发队列 执行耗时的异步操做
dispatch_async(dispatch_get_main_queue(),^{
回到主线程,执行UI刷新操做
});
});
5.GCD的全部的API都在libdispatch.dylib,Xcode会自动导入这个库
主头文件:#import <dispatch/dispatch.h>
6.延迟执行
1》perform 3秒后自定回到当前线程调用self的download:方法,并传递参数
[self performSelector(download:) withObject:@"http://555.jpg" afterDelay:3];
2>dispatch_after
任务放到那个队列中执行 延时多少秒
全局并发队列 diapatch_queue_t = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY,0);
时间 double delay = 3; 延时多少秒
dispatch_after(DISPATCH_TIME_NOW,delay,queue,^{
///3秒后要执行的任务
});
7.一次性代码
static dispatch_once_t onceToken; 队列
dispatch_once(&onceToken,^{
在程序运行过程当中,永远只执行一次
});