#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// NSOperation 的使用选择:
// 一般在开发中,直接使用 GCD 开启线程.做多线程的操作.
// 如果 自己需要自定义框架/需要管理操作,这个时候,选择NSOperation.
// 管理操作: 取消操作/暂停/恢复操作 ---- NSOperationQueue 可以管理.高级操作.
// GCD 可以让任务按顺序执行
// NSOperation 可以让操作按顺序执行吗? ---> 高级操作.
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// NSOperation 两个子类
// // 创建一个操作.
// NSInvocationOperation *op = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(test) object:nil];
//
// // 在当前线程执行. start 会在当前线程执行.直接启动
// [op start];
// 创建一个操作.
// 如果 NSBlockOperation 中封装的操作数 > 1(追加操作了),这个时候,不能保证任务在哪条线程中执行.即使将操作添加到主队列,依然会有任务在子线程执行.
// 建议:如果使用 NSBlockOperation,为了确保任务在自己想要的线程执行,最好不要追加操作.
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
//
[self test];
}];
// 追加操作/任务
[op addExecutionBlock:^{
//
NSLog(@"--------------1 %@",[NSThread currentThread]);
}];
// 追加操作/任务
[op addExecutionBlock:^{
//
NSLog(@"--------------2 %@",[NSThread currentThread]);
}];
// 追加操作/任务
[op addExecutionBlock:^{
//
NSLog(@"--------------3 %@",[NSThread currentThread]);
}];
// 追加操作/任务
[op addExecutionBlock:^{
//
NSLog(@"--------------4 %@",[NSThread currentThread]);
}];
// 直接启动操作
// [op start];
// NSOperation中的队列 -----> 操作队列 :管理/执行操作. 两种:
// 1.主队列:主队列中的操作,都要交给主线程执行.
//
// 获取主队列
NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
// 将操作添加到队列中
[mainQueue addOperation:op];
// 2.非主队列.添加到非主队列中的操作,都交给子线程来执行.
// // 创建一个非主队列
// NSOperationQueue *queue = [[NSOperationQueue alloc] init];
//
// // 将操作添加到非主队列中
// [queue addOperation:op];
// 这一句代码,相当于之前的两句.
[mainQueue addOperationWithBlock:^{
//
NSLog(@"直接往操作队列中添加操作%@",[NSThread currentThread]);
}];
}
-(void)test
{
NSLog(@"123456787654323456789%@",[NSThread currentThread]);
}
@end