介绍:
NSOperation是一个抽象类,并不具备封装操作的能力,必须使用它的子类;
BlockOperation:
只要BlockOperation封装的操作数 > 1,就会异步执行操作,但是不会无限制的创建线程
let blockOpe = BlockOperation() blockOpe.queuePriority = .veryHigh blockOpe.addExecutionBlock { print("BlockOperation执行了",Thread.current) } blockOpe.addExecutionBlock { print("BlockOperation2执行了",Thread.current) } blockOpe.start() //开始执行 //blockOpe.cancel() //取消
结果:
NSOperationQueue
创建队列
1.1 获取主队列以及添加操作到队列,主队列是串行队列,无论是否设置最大并行数量都是在当前线程执行,不会创建新的线程
1 let queue = OperationQueue.main 2 queue.addOperation { 3 for _ in 0...50000{ 4 print("OperationQueue1执行了",Thread.current) 5 } 6 }
结果:
2.1 同时具备串行和并发的功能,默认情况下是并发的,可以手动设置为串行队列,通过设置最大并发数属性来更改
1 c func racsTest() { 2 let queue = OperationQueue() 3 queue.maxConcurrentOperationCount = 10 4 queue.addOperation { 5 for _ in 0...50000{ 6 print("OperationQueue1执行了",Thread.current) 7 } 8 } 9 //addOperation已经在内部执行了start方法了
结果: