首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

多线程-NSOperation设置优先级/服务质量

2024-12-06 来源:华佗小知识

在iOS 8.0前,通过设置操作的优先级,尽可能的保证某个操作优先处理,随着硬件性能上的提升,通过设置优先级效果已经越来越不明显,在iOS 8.0后,推出了服务质量,通过设置服务质量,让系统优先处理某一个操作

@property NSOperationQueuePriority queuePriority;//操作优先级

@property NSQualityOfService qualityOfService NS_AVAILABLE(10_10, 8_0);//服务质量

示例代码:


#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController{
    
    NSOperationQueue *_queue;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 1. 实例化队列
    _queue = [[NSOperationQueue alloc] init];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    
    // 2.创建操作对象
    NSBlockOperation *operation1 = [NSBlockOperation blockOperationWithBlock:^{
        
        for (int i = 0; i < 20; i ++) {
            
            NSLog(@"Operation1");
        }
    }];
    
    // 3.设置优先级/服务质量
    
    // 3.1设置优先级
    
    /*      iOS 8.0下通过设置服务质量替代
     NSOperationQueuePriorityVeryLow = -8L,
     NSOperationQueuePriorityLow = -4L,
     NSOperationQueuePriorityNormal = 0,
     NSOperationQueuePriorityHigh = 4,
     NSOperationQueuePriorityVeryHigh = 8
     */
    //operation1.queuePriority = NSOperationQueuePriorityVeryHigh;
    
    // 3.2设置服务质量
    /*      iOS 8.0退出
     NSQualityOfServiceUserInteractive = 0x21,
     NSQualityOfServiceUserInitiated = 0x19,
     NSQualityOfServiceUtility = 0x11,
     NSQualityOfServiceBackground = 0x09,
     NSQualityOfServiceDefault = -1
     */
    operation1.qualityOfService = NSQualityOfServiceUserInteractive;
    
    NSBlockOperation *operation2 = [NSBlockOperation blockOperationWithBlock:^{
        
        for (int i = 0; i < 20; i ++) {
            
            NSLog(@"Operation2");
        }
    }];
    
    // 3.将两个操作添加到队列中
    [_queue addOperations:@[operation1,operation2] waitUntilFinished:NO];
}

@end
显示全文