第二天-多线程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二天-多线程相关的知识,希望对你有一定的参考价值。
(1)GCD,纯C,自动管理生命周期,大中央调度,要理解队列与任务,任务在队列里面去除遵循先进先出的准则。
(2)NSOperation,OC,基于GCD的封装,自动管理生命周期,把操作(NSOperation)放进队列(NSOperationQueue)里面,里面的额操作会异步执行。
-
线程间怎么通信?
- perfromSelectior:onThead:withObjecti:waitUntilDone:
- NSMachPort(在RunLoop里面的source0和source1里面)
-
cocoa常见的多线程实现
- 只有在主线程刷新访问UI
- 如果要保证属性的线程安全(atomic)
- 如果一部操作要保证线程安全等问题,尽量使用GCD
- 如果想要定时器精确,用GCD定时器
-
GCD内部实现
- ios和OSX的黑心是XNU内核,GCD是基于XNU内核实现的
- GCD的API全部在libdiPatch库中
- GCD的底层实现主要有DispatchQueue和DispatchSource
- DispatchQueue:管理block(操作)
- DispatchSource:处理事件(MACH端口发送,MACH端口接收,监测与进程的事件的10种事件)
-
NSOperation相对于GCD的优点
- 面向对象
- 封装性好
- 提供便利的方法
- 支持KVO,可以监测operation是否正在执行(isExecuted),是否结束(isFinished),是否取消(isCancled)
- GCD的执行速度比NSOperationQueue快
- 选择
- 任务需要依赖或者要监听任务的执行情况,用NSOperationQueue
- 在使用GCD的时候要防止循环引用
- ARC:_weak_unsafe_unretained
- MRC:_block
- 晚安~~
以上是关于第二天-多线程的主要内容,如果未能解决你的问题,请参考以下文章