您好,欢迎来到花图问答。
搜索
您的当前位置:首页多线程-NSOperation设置优先级/服务质量

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

来源:花图问答

在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

Copyright © 2019- huatuowenda.com 版权所有 湘ICP备2023022495号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务