美文网首页码无界IOS And Android
iOS多线程讲解二之NSOperation

iOS多线程讲解二之NSOperation

作者: kevinLY | 来源:发表于2016-04-06 10:15 被阅读40次

    本文主要参考Apple官方文档,英文好的可以直接看官方文档

    NSOperation.png

    NSOperation类是一个你可以用来封装代码和单任务相关的数据的抽象类。因为他是抽象的,所以你不能直接使用这个类,但是你可以子类化这个类,或者使用系统定义的子类(NSInvocationOperationNSBlockOperation)来执行实际的任务。尽管是抽象的,NSOperation的基本实现包含重要的逻辑来确保你的任务安全的执行。 这种内嵌的逻辑的存在,能够让你专注于你的任务的实现,而不是确保它与其他系统对象正常工作粘合代码。
    一个NSOperation对象是一个单次对象,也就是说,它只能执行一次任务,并且不能再次执行。典型的一种情况是把你要执行的操作添加到一个operation queue (一个NSOperationQueue类的实例). 操作队列直接执行它的操作,运行他们辅助线程或间接使用thelibdispatch库(又称中央调度) 。有关队列如何执行操作的更多信息,请参阅NSOperationQueue Class Reference类参考。
    如果你不希望使用操作队列,可以直接在代码中调用start方法执行自己的操作。执行手动操作会加重依赖你的代码,因为启动一个不处于就绪状态的操作会触发异常。而ready属性会报告其就绪状态。

    • Operation依赖关系
      依赖关系是在一个特定的顺序来执行操作的方便的方法。你可以使用addDependency: 和 removeDependency:方法为一个操作添加或者移除依赖关系。默认情况下,一个操作在它依赖的操作执行完成前是不会被执行的。一旦最后一个依赖操作执行完成,那么,该操作就会准备,并能够执行。
      NSOPeration提供的依赖关系不会判断其依赖操作的执行成功或者失败(取消一个操作也代表着完成)。当该操作的依赖操作被取消或者没有成功执行的时候,它取决于你是否还继续执行该操作。这可能需要你在你测操作对象中集成一些错误跟踪功能。
    • 键值观察属性
      NSOperation类的一些属性支持键值编码和键值观察。如果有需要,你可以通过观察这些属性来控制你的应用的其他部分,以下是可以观察的属性:
        //是否取消
        isCancelled - read-only
    
        //是否异步
        isAsynchronous - read-only
    
        //是否正在执行
        isExecuting - read-only
    
       //是否执行完成
        isFinished - read-only
    
        //是否就绪
        isReady - read-only
    
        //依赖关系
        dependencies - read-only
    
        //队列中的优先级
        queuePriority - readable and writable
    
        //完成后执行的block
        completionBlock - readable and writable
    

    相关文章

      网友评论

        本文标题:iOS多线程讲解二之NSOperation

        本文链接:https://www.haomeiwen.com/subject/bzvplttx.html