import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//创建队列
let queue = OperationQueue()
//设置最大并发数
queue.maxConcurrentOperationCount = 2
//创建operation
let operation = BlockOperation {() -> Void in
print("创建一个operation")
}
//当operation有多个任务的时候会自动分配多个线程并发执行,
//如果只有一个任务,会自动在主线程同步执行
//operation.start()
operation.addExecutionBlock({() -> Void in
print("添加任务一")
})
operation.addExecutionBlock({() -> Void in
print("添加任务二")
})
//创建另一个operation
let operation2 = BlockOperation{() -> Void in
print("创建另一个operation")
//NSOperation操作监听,一个操作完成后调用另一个操作:
self.operationCompletion()
}
//等operation执行完再执行operation2
operation2.addDependency(operation)
//添加到队列中的operation将自动异步执行
queue.addOperation(operation)
queue.addOperation(operation2)
//还有一种方式,直接将operation的blcok直接加入到队列
queue.addOperation { () -> Void in
print("添加任务1")
}
queue.addOperation { () -> Void in
print("添加任务2")
}
queue.addOperation { () -> Void in
print("添加任务3")
}
queue.addOperation { () -> Void in
print("添加任务4")
}
}
func operationCompletion(){
//创建队列
let queue = OperationQueue()
let operation = BlockOperation { () -> Void in
print("print A")
}
operation.completionBlock = doSomething
queue.addOperation(operation)
}
func doSomething(){
print("doSomething")
//创建队列
let queue = OperationQueue()
queue.addOperation { () -> Void in
print("子线程中执行任务")
OperationQueue.main.addOperation({ () -> Void in
print("主线程刷新UI")
})
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
总结:NSOperation解决了NSThread中需要我们手动管理线程等繁琐操作,我们只需将执行事件托付到线程中,不需要对线程进行上锁和解锁