GCD
容易混淆的术语
- 同步/异步/并发/串行
同步和异步: 决定要不要开启新的线程
- 同步: 在当前线程中执行任务,不具备开启新线程的能力
- 异步: 在新的线程中执行任务,具备开启新线程能力
并发与串行 决定了任务的执行方式
- 并发:多个任务可以同时执行
- 串行: 一个任务结束后才可以进行下一个任务
无论是同步或者异步 只要是在串行队列中的任务 ,就必须等待上一个任务完成之后才可以执行
- 串行队列
- 使用dispatch_queue_create 函数创建串行队列
- dispatch_queue_create(const char*label , dispatch_queue_attr_t,attr);
- 参数1: label:队列名称
-参数2:attr:队列的属性 dispatch_queue_serial
- 并发队列
- 先进先出的方法,并发调度队列中的任务执行,再调度后续任务
- 当前调度如果是同步执行的,会等待任务执行完毕后再调度后续的
- 如果调度室异步执行的,同时底层线程池有可用的线程资源,会再新的线程调度后续任务的执行
主要是记得 同步和异步的区别,即使是并行或者串行 但是如果不是异步或者同步也满足条件 是不能根据两项中的一个来确定任务的调度和执行的方式的
同步任务和异步任务的使用:
登录qq之后刷新联系人头像和个性签名等信息
GCD默认的提供全局并发队列(建议使用这个)
- 全局队列(没有名称)
日常开发建议使用全局队列 - 并发队列(有名称)和NSthresd的name作用类似
延时执行
ios常见的延时执行方式:2种
1.调用NSObject
[self performSelector:@selector(run) withObject:nil afterDelay:2.0];
//2秒后再调用self的run方法
2.使用GCD函数
dispatch_after(dispatch_time (DISPATCH_TIME_NOW ,(int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 2秒后异步执行这里的代码...
});
单利模式
- 单利的作用:
- 保证一个类在整个程序运行过程中,只有一个实例,而且该实例易于供外界访问 ----方便的控制了实例个数 节约系统资源
- 使用场合:
- 整个应用程序中,共享一分资源(这个资源只需要创建并初始化一次)