多线程相关知识
2021-02-07 本文已影响0人
River_YYH
1、iOS中一般有哪几种?各自的特点是什么?
iOS 中一般有GCD、NSOperation/NSOperationQueue、NSThread
GCD:用来实现简单线程同步、子线程的分派、多读单写等
NSOperation:比如ANetworking、由于它自身特别可以通过控制状态如添加依赖、移除依赖
NSThread:常用来实现一个常驻线程
NSOperation 对象在finished之后怎样从queue当中移除?
NSOperation 对象在finished之后会会在内部通过kvo方式 通知它所对应
NSOperationQueue中的相应queue进行移除
.你都用过哪些锁?结合实际谈谈你是怎么样使用的?
NSLock\ NSRecursiveLock(递归锁)
@synchornized :一般在创建单里对象的时候使用

因为锁重入原因造成了死锁,如何解决呢?使用递归锁NSRecursiveLock

2、死锁的原因
队列引起的循环等待。



GCD 底层开启的线程是没有开启RunLoop的,而performSelector: withObject:afterDelay:提交的方法必须要在RunLoop中
3、dispatch_barrier_async()

a、怎样利用GCD实现多读单写?
通过GCD的dispatch_barrier_async来实现
4、NSOperation
a、用NSOperation实现多线程有哪些优势和特点
1)、可以添加任务依赖
2)、任务执行状态控制
3)、可以控制最大并发量
b、任务执行状态
-
我们可以控制NSOperation的哪些执行状态?
.isReady
.isExecuting
.isFinished
.isCancelled
image.png
2.系统是怎样移除一个isFinished = YES的NSOperation?
系统是通过KVO方式
5、NSThread







