iOS多线程入门

来源:互联网 发布:决战 秘笈进阶数据 编辑:程序博客网 时间:2024/05/21 10:24
三种多线程方式
NSThread:基本不用
GCD:
原理:先创建一个队列 把操作(任务)加载里面
队列:串行/并行
任务:同步异步

串行异步非常常用(类似于排队走, 最安全的线程)   用于下载图片
并行异步(并排跑 类似于赛跑) 执行顺序程序员不能控制

串行同步  队列同步任务同样会在主线程上运行(不用)
并行同步 不需要创建子线程

串行队列既可以保证效率 (新建一个子线程)  又能够实现并发
并行队列容易出错  执行顺序程序员不能控制

同步任务一般用来阻塞任务(如登录)
gcd全局队列
与并行的区别:
  • 全局队列不需要创建 直接get就能用
  • 执行效果 与两个队列的执行效果一样
  • 全局队列没有名称 调试时无法确定准确队列
gcd主线程队列(保证操作在主线程运行)
每一个程序只有一个主线程(所有iOS开发中 UI操作 都必须在主线程上执行)
异步任务 在主线程运行 同时也是保持队形的
同步任务 会阻塞 因为主线程一直在工作  一直在执行任务 同步的任务永远不会被执行 



NSOperationQueue:
两个队列:主队列/自定义队列
原理:定义一个操作  加入到队列中
开多少线程  由系统决定

GCD 是串行队列,异步执行,只会开一个线程
NSOperationQueue:
  • 可以设定执行顺序  用addDependency 可能会开多个线程  但是不会开太多
  • 依赖关系  可以跨队列 
  • 可以设置最大并发数(在设定最大并发数时,如果前一个线程工作完成 但是没有销毁会新建线程)
应用场景:网络开发中,下载工作 
NSBlockOperation:

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


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


0 0
原创粉丝点击