NSOperationQueue简介

我们知道GCD中的队列有三种:主队列、串行队列和并行队列。NSOperationQueue更简单,只有两种:主队列和非主队列。

我们自己生成的NSOperationQueue对象都是非主队列,主队列可以用 mainQueue取得。

NSOperationQueue的主队列是串行队列,而且其中所有NSOperation都会在主线程中执行。

对于非主队列来说,一旦一个NSOperation被放入其中,那这个NSOperation一定是并发执行的。 NSOperationQueue会为每一个NSOperation创建线程并调用它的start方法。

KVO键值观察
  • operations - read-only
  • operationCount - read-only
  • maxConcurrentOperationCount - readable and writable
  • suspended - readable and writable
  • name - readable and writable
获取特殊NSOperationQueue
  • +(NSOperationQueue *)currentQueue
    • 返回当前NSOperationQueue,如果当前线程不是在NSOperationQueue上运行则返回nil
  • +(NSOperationQueue *)mainQueue
    • 返回主线程的NSOperationQueue
管理队列中的Operation
  • -(void)addOperation:(NSOperation *)operation
    • 加入到执行队列中,如果isReady则开始执行
  • -(void)addOperations:(NSArray<NSOperation > )ops waitUntilFinished:(BOOL)wait
    • 批量加入执行operation,wait标志是否当前线程等到所有operation结束
  • -(void)addOperationWithBlock:(void (^)(void))block
    • 相当于加入一个NSBlockOperation执行任务
  • -(void)cancelAllOperations
    • 相当于加入一个NSBlockOperation执行任务
  • -(void)waitUntilAllOperationsAreFinished
    • 当前线程等待,直到所有operation都执行结束
  • @property(readonly, copy) NSArray <__kindof NSOperation > operations
    • 返回已加入执行operation的数组,当某个operation结束后会自动从这个数组清除
  • @property(readonly) NSUInteger operationCount
    • 返回已加入执行operation的数目
  • @property NSInteger maxConcurrentOperationCount
    • 设置最大并发执行数,如果为1则同时只有一个并发任务在运行,可控制顺序执行关系
  • @property(getter=isSuspended) BOOL suspended

      queue.suspended = true //暂停queue中所有operation  
      queue.suspended = false //恢复queue中所有operation 

简单使用:

let operationQueue = NSOperationQueue()  
let operation = NSBlockOperation { () -> Void in  
    print(NSThread.currentThread())
}
operation.addExecutionBlock { () -> Void in
    print("execution block1 -- (NSThread.currentThread())")
}
operationQueue.addOperation(operation)  
print("操作结束")

转载于:https://www.cnblogs.com/sunyanyan/p/5364730.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值