参考: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等方式。