#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
#pragma mark --NSInvocationOperation方法--
//NSOperation 是一个抽象类 不能直接使用
//通过NSInvocationOperation 类来创建以一个NSOperation对象
//NSOperation 类及其子类本身不会进行线程的创建
NSInvocationOperation *operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(hehe) object:nil];
//operation在单独使用的时候 一定要调用开始方法
// [operation start];
#pragma mark -- NSBlockOperation方法--
//使用NSBlockOperation 创建一个NSOperation对象
NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@" main2 == %@", [NSThread mainThread]);
NSLog(@"current2 ==%@", [NSThread currentThread]);
NSLog(@"bbb");
}];
// [blockOperation start];
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
//给两个任务添加一个依赖关系 这两个任务就会按照依赖关系顺序执行
[operation addDependency:blockOperation];
// queue.maxConcurrentOperationCount = 2;
[queue addOperation:operation];
[queue addOperation:blockOperation];
//获取系统提供的主队列
NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//NSOperationQueue 是一个队列管理器, 可以根据operation 任务自己分配线程, 自己管理线程的生命周期
//在开发过程中,我们不需要管理线程的创建和销毁
//NSOperationQueue 创建的是n个并行的线程
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
//最大线程并发数
//maxConcurrentOperationCount 表示同时执行任务的最大数量
//即使只执行一个任务, 系统有的时候也会开辟多个线程去执行这个任务
queue.maxConcurrentOperationCount = 1;
for (int i = 0; i < 10; i++) {
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"current%d = %@", i, [NSThread currentThread]);
}];
[queue addOperation:operation];
}
}
- (void)hehe
{
NSLog(@" main == %@", [NSThread mainThread]);
NSLog(@"current ==%@", [NSThread currentThread]);
NSLog(@"??");
}
原文:http://www.cnblogs.com/huyibo/p/5371103.html