zoukankan      html  css  js  c++  java
  • 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("操作结束")
  • 相关阅读:
    浅谈Java 8的新特性和使用场景
    Oracle下通过EXPDP导出某用户下的所有表,实例
    官网下载I.MX6参考手册
    TFTP服务开启
    二、 U-Boot 命令使用
    CP15协处理器
    Linux内核配置Kconfig语法
    M.2接口是如何辨别插入的SSD是SATA协议还是NVME协议?
    SSH 服务开启
    一 、 UBOOT简介
  • 原文地址:https://www.cnblogs.com/sunyanyan/p/5364730.html
Copyright © 2011-2022 走看看