iOS多线程讲解二之NSOperation
2016-04-06 本文已影响40人
kevinLY
本文主要参考Apple官方文档,英文好的可以直接看官方文档
NSOperation.pngNSOperation类是一个你可以用来封装代码和单任务相关的数据的抽象类。因为他是抽象的,所以你不能直接使用这个类,但是你可以子类化这个类,或者使用系统定义的子类(NSInvocationOperation或NSBlockOperation)来执行实际的任务。尽管是抽象的,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