iOS总结-多线程篇之NSOperation和NSOperationQueue

参考:https://www.jianshu.com/p/4b1d77054b35

NSOperation/NSOperationQueue是基于GCD更高一层的封装,完全面向对象。

优点:1.可添加完成的代码块,在操作完成后执行

            2.添加操作之间的依赖关系,方便控制执行顺序

            3.设定操作的优先级

            4.可以很方便的取消一个操作的执行

            5.使用KVO观察对操作执行状态的更改:isExecuteing,isFinished,isCancelled

NSOperation是个抽象类,不能封装操作,只能使用它的子类来封装操作

子类NSInvocationOperation

iOS总结-多线程篇之NSOperation和NSOperationQueue_第1张图片

子类NSBlockOperation

iOS总结-多线程篇之NSOperation和NSOperationQueue_第2张图片

自定义继承自NSOperation的子类

iOS总结-多线程篇之NSOperation和NSOperationQueue_第3张图片

iOS总结-多线程篇之NSOperation和NSOperationQueue_第4张图片

NSOperation需要配合NSoprationQueue来实现多线程。我们需要把创建好的操作加入队列中。

NSOperationQueue有两种队列:主队列、自定义队列

iOS总结-多线程篇之NSOperation和NSOperationQueue_第5张图片

addOperationWithBlock:添加操作进入队列中,并并发执行

iOS总结-多线程篇之NSOperation和NSOperationQueue_第6张图片

addDependency:添加操作的依赖关系,注意区分操作的优先级关系,以及操作执行结束顺序

iOS总结-多线程篇之NSOperation和NSOperationQueue_第7张图片

NSOperation、NSOperationQueue控制串行、并发执行,maxConcurrentOperationCount

在主线程里面进行UI刷新,如点击、滚动、拖延等事件。通常把一些耗时的操作放在其他线程,如图片下载、文件上传,完成耗时操作后,需要回到主线程。

iOS总结-多线程篇之NSOperation和NSOperationQueue_第8张图片

NSOperation、NSOperationQueue要注意线程安全,注意给线程加锁,加锁方式:@synchronized/NSLock/NSRecursiveLock/NSConditionLock/pthread_mutex/dispatch_semaphore/OSSpinLock/atomic(property)set/get等方式。

iOS总结-多线程篇之NSOperation和NSOperationQueue_第9张图片

 

你可能感兴趣的:(iOS)