NSOpertaion是一个类 -允许你去捆绑一系列的工作,然后在将来在某种程度上去执行它,如果你熟悉命令行设计模式,你将会基本上视NSOpertion为一个命令对象。你通过设计你的算法然后转换它进入一个NSOpertion去出发。这个operation有一个状态machine去呈现它的生命周期。
一旦一个NSOperation被实例化,它将会转换到一个准备的状态,在某种程度上而言,一些事情将会调用开始的方法,在另外的方面,它将会移动到执行的状态,从执行的状态,这个operation能以二种方式中的一种去运行。
1,如果取消的方法被调用,在移动到一个完成的状态之前,它将会转换到取消的状态。
2,如果这个操作不被取消,然后事实上它将会转换到完成的状态。

你可以通过NSOpertaion API看这个生命周期如何显示

这些所有都符合KVO,因此对于状态的转变你能注册去接收通知。
方式中的一种:你可以对于一个操作提供函数去子类化NSOperation。在简单的场景中,这和重写main方法一样简单。NSOperation基类帮你处理所有的状态转换。
在将来的教程中,你将会手动处理opertation,你能提供一个闭包-当操作完成,则被调用(沿用service等级quality一起)
底层的线程运行于不同的优先级等级-允许scheduler去在其他的线程之上去优先处理一些线程。优先级等级是十分困难的-和错误一起工作或者充满错误,其中需要优先级跳转。
Quality Of Service
苹果已经抽象了优先级的概念到一个以QualityOfService的概念

这个允许你去根据自己的意图去配置,然后使用scheduler去决定如何横穿大量的resource去同时应付优先级。
QualityOfService 通过QualityOfService的枚举来呈现,并且有一个值。
UserInteractive
用户直接交互的一些任务,例如scrollview的渲染
UserInitiated
用户立刻需要的一些任务,但是不能直接渲染到screen上,例如打开一个document
Utility
用户将用一个spinner(等着它们完成)来呈现的一些任务,例如下载数据
background
用户不直接关心的一些任务,例如同步数据到远程的服务器或者清除一个数据仓库
Default
介于userInitiate和Utility之间
除此之外,子类化NSOperation,你能创建一个operation去呈现你的任务(使用NSBlockOpertaion)
public class NSBlockOperation:NSOperation {
public convenience init(block:()->Void)
public func addExecutionBlock(block:() ->Void)
public var executionBlocks:[()->Void] {get}
}上面是一个NSOperation的具体子类化,带了一个或者多个闭包,当block被调用的时候,则运行它们
