1、概要
NSOpeartion 封装了需要执行的操作, 在GCD的基础上进行了封装。
NSOpeartion 是抽象基类。a:使用系统提供的子类。b:自定义子类来继承。
NSOpeartionQueue 是操作队列,专门用来调度和管理NSOperation.
2、使用
NSBlockOperation
start, cancel, completion
自定义NSOperation的子类
NSOperation的依赖关系addDependency
修改NSOperation的执行顺序queuePriority
对垒的最大并发操作数maxConcuttentOperationCount
let myOperation = NSBlockOperation({ () -> Void in
// 子线程操作
dispatch_async(dispatch_get_main_queue(), {() -> Void in
// 主线程操作
})
})
// 回调 操作完成之后的执行回调
myOperation.completionBlock = {
// 闭包
}
// 在家一个执行的任务到myOperation,并行执行,且最后执行回调代码
myOperation.addExecutionBlock{
// 闭包
}
// 加入到队列中
NSOperationQueue().addOperation(myOperation)
---自定义的NSOperation---
import UIKit
/**
* 定义一个协议用于回调
*/
protocol opCompletionDelegate {
func opCompletion(data: NSData)
}
class MyOperation: NSOperation {
var delegate: opCompletionDelegate?
override func main() {
super.main()
dispatch_async(dispatch_get_main_queue(), { () -> Void in
if let myDelegate = self.delegate { // 如果实现了这个协议
// 将网络请求的数据用协议方法回调
myDelegate.opCompletion(data!)
}
})
}
}
class AController: UIViewController, opCompletionDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let myOperation = MyOperation()
myOperation.delegate = self
}
// 实现协议的方法
func opCompletion(data: NSData) {
// 得到通过代理传递过来的数据更新操作
}
}