在iOS 8.0前,通過設(shè)置操作的優(yōu)先級(jí),盡可能的保證某個(gè)操作優(yōu)先處理,隨著硬件性能上的提升,通過設(shè)置優(yōu)先級(jí)效果已經(jīng)越來越不明顯,在iOS 8.0后,推出了服務(wù)質(zhì)量,通過設(shè)置服務(wù)質(zhì)量,讓系統(tǒng)優(yōu)先處理某一個(gè)操作
@property NSOperationQueuePriority queuePriority;//操作優(yōu)先級(jí)
@property NSQualityOfService qualityOfService NS_AVAILABLE(10_10, 8_0);//服務(wù)質(zhì)量
示例代碼:
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController{
NSOperationQueue *_queue;
}
- (void)viewDidLoad {
[super viewDidLoad];
// 1. 實(shí)例化隊(duì)列
_queue = [[NSOperationQueue alloc] init];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
// 2.創(chuàng)建操作對(duì)象
NSBlockOperation *operation1 = [NSBlockOperation blockOperationWithBlock:^{
for (int i = 0; i < 20; i ++) {
NSLog(@"Operation1");
}
}];
// 3.設(shè)置優(yōu)先級(jí)/服務(wù)質(zhì)量
// 3.1設(shè)置優(yōu)先級(jí)
/* iOS 8.0下通過設(shè)置服務(wù)質(zhì)量替代
NSOperationQueuePriorityVeryLow = -8L,
NSOperationQueuePriorityLow = -4L,
NSOperationQueuePriorityNormal = 0,
NSOperationQueuePriorityHigh = 4,
NSOperationQueuePriorityVeryHigh = 8
*/
//operation1.queuePriority = NSOperationQueuePriorityVeryHigh;
// 3.2設(shè)置服務(wù)質(zhì)量
/* 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.將兩個(gè)操作添加到隊(duì)列中
[_queue addOperations:@[operation1,operation2] waitUntilFinished:NO];
}
@end