多线程相关知识

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容