NSOperationQueue详解
2017-05-07 本文已影响0人
AntKing
NSOperationQueue属相和方法
//添加operation
- (void)addOperation:(NSOperation *)op;
//添加operation,并且等待其执行完毕,会阻塞线程
- (void)addOperations:(NSArray<NSOperation *> *)ops waitUntilFinished:(BOOL)wait NS_AVAILABLE(10_6, 4_0);
//添加operation,把操作都放在block里面了
- (void)addOperationWithBlock:(void (^)(void))block NS_AVAILABLE(10_6, 4_0);
//已经添加到queue里的operation
@property (readonly, copy) NSArray<__kindof NSOperation *> *operations;
//已经添加到queue里的operation的个数
@property (readonly) NSUInteger operationCount NS_AVAILABLE(10_6, 4_0);
//在queue里面一次可以执行的最多的operation的个数
@property NSInteger maxConcurrentOperationCount;
//是否是暂停状态
@property (getter=isSuspended) BOOL suspended;
//queue的名字
@property (nullable, copy) NSString *name NS_AVAILABLE(10_6, 4_0);
//质量
@property NSQualityOfService qualityOfService NS_AVAILABLE(10_10, 8_0);
//gcd的queue
@property (nullable, assign /* actually retain */) dispatch_queue_t underlyingQueue NS_AVAILABLE(10_10, 8_0);
//取消所有操作
- (void)cancelAllOperations;
//等待所有操作执行完成
- (void)waitUntilAllOperationsAreFinished;
#if FOUNDATION_SWIFT_SDK_EPOCH_AT_LEAST(8)
//当前queue
@property (class, readonly, strong, nullable) NSOperationQueue *currentQueue NS_AVAILABLE(10_6, 4_0);
//mainQueue
@property (class, readonly, strong) NSOperationQueue *mainQueue NS_AVAILABLE(10_6, 4_0);
案列如下
//1.创建队列
//默认是并发队列
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
//2.设置最大并发数量 maxConcurrentOperationCount
//同一时间最多有多少个任务可以执行
//串行执行任务!=只开一条线程 (线程同步)
// maxConcurrentOperationCount >1 那么就是并发队列
// maxConcurrentOperationCount == 1 那就是串行队列
// maxConcurrentOperationCount == 0 不会执行任务
// maxConcurrentOperationCount == -1 特殊意义 最大值 表示不受限制
queue.maxConcurrentOperationCount = 1;
//3.封装操作
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"1----%@",[NSThread currentThread]);
}];
NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"2----%@",[NSThread currentThread]);
}];
NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"3----%@",[NSThread currentThread]);
}];
NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"4----%@",[NSThread currentThread]);
}];
NSBlockOperation *op5 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"5----%@",[NSThread currentThread]);
}];
NSBlockOperation *op6 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"6----%@",[NSThread currentThread]);
}];
NSBlockOperation *op7 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"7----%@",[NSThread currentThread]);
}];
//4.添加到队列
[queue addOperation:op1];
[queue addOperation:op2];
[queue addOperation:op3];
[queue addOperation:op4];
[queue addOperation:op5];
[queue addOperation:op6];
[queue addOperation:op7];