GCD小总结

主线程: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,^{

  在程序运行过程当中,永远只执行一次

});

相关文章
相关标签/搜索