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

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

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

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

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

            3.设定操作的优先级

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

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

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

子类NSInvocationOperation

子类NSBlockOperation

自定义继承自NSOperation的子类

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

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

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/qq_28551705/article/details/83422242