三种多线程方式




NSThread:基本不用


GCD:


原理:先创建一个队列 把操作(任务)加载里面


队列:串行/并行


任务:同步异步



串行异步非常常用(类似于排队走, 最安全的线程)   用于下载图片


并行异步(并排跑 类似于赛跑) 执行顺序程序员不能控制




串行同步  队列同步任务同样会在主线程上运行(不用)


并行同步 不需要创建子线程



串行队列既可以保证效率 (新建一个子线程)  又能够实现并发


并行队列容易出错  执行顺序程序员不能控制



同步任务一般用来阻塞任务(如登录)


gcd全局队列


与并行的区别:


  • 全局队列不需要创建 直接get就能用
  • 执行效果 与两个队列的执行效果一样
  • 全局队列没有名称 调试时无法确定准确队列

gcd主线程队列(保证操作在主线程运行)


每一个程序只有一个主线程(所有iOS开发中 UI操作 都必须在主线程上执行)


异步任务 在主线程运行 同时也是保持队形的


同步任务 会阻塞 因为主线程一直在工作  一直在执行任务 同步的任务永远不会被执行 





NSOperationQueue:


两个队列:主队列/自定义队列


原理:定义一个操作  加入到队列中


开多少线程  由系统决定



GCD 是串行队列,异步执行,只会开一个线程


NSOperationQueue:


  • 可以设定执行顺序  用addDependency 可能会开多个线程  但是不会开太多
  • 依赖关系  可以跨队列 
  • 可以设置最大并发数(在设定最大并发数时,如果前一个线程工作完成 但是没有销毁会新建线程)

应用场景:网络开发中,下载工作 


NSBlockOperation:



NSInvocationOP:


需要定义一个方法 能接受一个参数 使用不够灵活




注:所有自定义队列,都是在子线程中运行