//
// ViewController.m
// 01-nsoperration
//
// Created by panba on 16-10-16.
// Copyright (c) 2016年 panba. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// [self blockOperation];
// [self oprationqueue];
[self operationListen];
}
-(void)operationListen
{
NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"-----block---%@",[NSThread currentThread]);
}];
blockOperation.completionBlock = ^{
NSLog(@"-----block完成---%@",[NSThread currentThread]);
//操作执行完之后的操作
};
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
[queue addOperation:blockOperation];
}
-(void)oprationqueue
{
//1-添加事件
NSInvocationOperation *operation1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download) object:nil];
//队列中线程的优先级
operation1.queuePriority = NSOperationQueuePriorityVeryHigh;
NSInvocationOperation *operation2 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(run) object:nil];
NSBlockOperation *blockoperation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"-----block---%@",[NSThread currentThread]);
}];
[blockoperation addExecutionBlock:^{
NSLog(@"-----block2---%@",[NSThread currentThread]);
}];
//添加操作依赖 , 不同到队中队操作可以依赖
[operation2 addDependency:blockoperation];
[blockoperation addDependency:operation1]; //只有执行完操作1之后,才能执行操作2
//2-添加队列
NSOperationQueue *operationqueue = [[NSOperationQueue alloc]init];
//最大并发数
operationqueue.maxConcurrentOperationCount = 1; //一般在5以内 在2-3为宜
//添加操作到队列中,自动执行操作,自动开启线程
[operationqueue addOperation:operation1];
[operationqueue addOperation:operation2];
[operationqueue addOperation:blockoperation];
//暂停和恢复队列
// [operationqueue setSuspended:YES]; //yes 暂停队列 no 恢复队列
}
-(void)blockOperation
{
// NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
// NSLog(@"-------download---%@",[NSThread currentThread]);
// }];
NSBlockOperation *blockoperation = [[NSBlockOperation alloc]init];
[blockoperation addExecutionBlock:^{
NSLog(@"-------download-1---%@",[NSThread currentThread]);
}];
[blockoperation addExecutionBlock:^{
NSLog(@"-------download-2---%@",[NSThread currentThread]);
}];
[blockoperation addExecutionBlock:^{
NSLog(@"-------download-3---%@",[NSThread currentThread]);
}];
[blockoperation start];
}
-(void)invocationoperation
{
NSInvocationOperation *operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download) object:nil];
[operation start];
}
-(void)download
{
NSLog(@"-------download---%@",[NSThread currentThread]);
}
-(void)run
{
NSLog(@"-------run---%@",[NSThread currentThread]);
}
@end