学习 原文链接 http://www.jianshu.com/p/443a18031366
override func viewDidLoad() {
super.viewDidLoad()
basicOperation() //basicOperation() 25 {number = 3, name = (null)}
createBasicBloclQueue() //createBasicBloclQueue() 33 {number = 1, name = main
}
private func basicOperation(){
let op = Operation.init()
op.completionBlock = {
print(#function,#line,Thread.current)
}
let opQueue = OperationQueue.init()
opQueue .addOperation(op)
}
private func createBasicBloclQueue(){
let operation = BlockOperation.init {
print(#function,#line,Thread.current)
}
operation.start();
}
运行结果我已经写在后面了
创建完Operation如果直接运行,就会在当前线程执行。也就是说,如果实在主线程创建并且start的,那就会在主线程执行;如果是在子线程创建并且start的,那就会在子线程执行。
Operation中表示优先级的属性是queuePriority,表示操作在队列中的优先级。
extension Operation {
public enum QueuePriority : Int {
case veryLow
case low
case normal
case high
case veryHigh
}
}
这些优先级都是相对的,并不是是说必须要执行完最高的才执行次重要的。这里面并没有一个特别严格顺序。只是在分配资源上有倾向性。如果队列需要有严格的执行顺序,还是要添加依赖关系的
OperationQueue的优先级qualityOfService
public enum QualityOfService : Int {
case userInteractive
case userInitiated
case utility
case background
case `default`
}