废话不多说直接上代码,我们设置优先级不能保证优先级高的线程以后比优先级低的线程先执行完,只能够说会被CPU分配到更多的机会去执行。
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic,strong)NSOperationQueue * queue;
@end
@implementation ViewController
-(NSOperationQueue *)queue
{
if(!_queue)
{
_queue=[NSOperationQueue new];
}
return _queue;
}
- (void)viewDidLoad {
[super viewDidLoad];
NSBlockOperation * op1=[NSBlockOperation blockOperationWithBlock:^{
for(int i=0;i<10;i++)
{
NSLog(@"op1 %d %@",i,[NSThread currentThread]);
}
}];
//设置优先级最高
op1.qualityOfService=NSQualityOfServiceUserInteractive;
[self.queue addOperation:op1];
//等待操作1结束之后才去执行,是执行在子线程上的
[op1 setCompletionBlock:^{
NSLog(@"%@",[NSThread currentThread]);
}];
NSBlockOperation * op2=[NSBlockOperation blockOperationWithBlock:^{
for(int i=0;i<10;i++)
{
NSLog(@"op2 %d %@",i,[NSThread currentThread]);
}
}];
//设置优先级最低
op2.qualityOfService=NSQualityOfServiceBackground;
op2.queuePriority=NSOperationQueuePriorityVeryLow;
[self.queue addOperation:op2];
}