多线程相关知识

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 :一般在创建单里对象的时候使用

image.png

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


image.png

2、死锁的原因

队列引起的循环等待。
image.png
image.png
image.png
GCD 底层开启的线程是没有开启RunLoop的,而performSelector: withObject:afterDelay:提交的方法必须要在RunLoop中

3、dispatch_barrier_async()

image.png

a、怎样利用GCD实现多读单写?

通过GCD的dispatch_barrier_async来实现

4、NSOperation

a、用NSOperation实现多线程有哪些优势和特点

1)、可以添加任务依赖
2)、任务执行状态控制
3)、可以控制最大并发量

b、任务执行状态
  1. 我们可以控制NSOperation的哪些执行状态?
    .isReady
    .isExecuting
    .isFinished
    .isCancelled


    image.png

    2.系统是怎样移除一个isFinished = YES的NSOperation?
    系统是通过KVO方式

5、NSThread

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
上一篇 下一篇

猜你喜欢

热点阅读