对GCD的面向对象的封装
1.NSInvocationOperation
默认在住线程
2.NSBlockOperation
默认在主线程 可添加额外任务在子线程
3.NSOperationQueue
Queue 分为主队列
[NSOperationQueue mainQueue] //凡是添加到主队列中的任务(NSOperation) 都会放在住线程中进行
和其他队列(并发队列 串行队列)
[[NSOperationQueue alloc]init] 默认是并发队列 //凡是添加到其他队列中的任务(NSOperation) 都会放在子线程中进行
添加一个并发队列 并且添加进三个Operation
得到结果如下,一个三个Operation都在并发子线程
4.同步执行和异步执行
NSOperation 对象 start 方法开启 默认是同步执行的
创建NSOperationQueue 并将 NSOperation 对象添加进Queue 后 是异步执行的
4.串行队列和并发队列
通过设置NSOperationQueue 对象的最大并发操作数,maxConcurrentOperationCount 来控制最大并发数
例如设置最大并发数后X,NSOperationQueue 内部自己决定线程的调度 新开多少条队列 多少条队列 但是每次执行并发数为X
当 maxConcurrentOperationCount=1 时 为串行队列
5.队列的挂起(暂停) 和取消
NSOperationQueue 对象的 supended 属性 控制是否继续该队列进行
NSOperationQueue 对象的 cancelAllOperations 取消队列执行
但是!
无论是挂起还是取消
都只能终止线程的继续 而线程内部的耗时操作 会被继续执行