//
// ViewController.m
// NSOperation的基本使用
//
/*
NSOperation的作用:
配合使用NSOpertaion和NSOperationQueue也能实现多线程编程
NSOpertaion和NSOperationQueue实现多线程的具体步骤:
先将需要执行的操作封装到一个NSOperation对象中;
然后将NSOperation对象添加到NSOperationQueue中;
系统会自动将NSOperationQueue中的NSOperation取出来;
然后将取出的NSOperation封装的操作放到一条新线程中执行
*/
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self operationQueue];
}
- (void)operationQueue
{
//1.封装操作
NSInvocationOperation *operation1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(download) object:nil];
NSInvocationOperation *operation2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run) object:nil];
NSBlockOperation *operation3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"NSBlockOperation--下载图片1--%@",[NSThread currentThread]);
}];
//2.创建队列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
//3.添加操作到队列中
[queue addOperation:operation1];
[queue addOperation:operation2];
[queue addOperation:operation3];
}
- (void)blockOperation
{
//1.封装操作
// NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
// NSLog(@"NSBlockOperation--下载图片1--%@",[NSThread currentThread]);
// }];
NSBlockOperation *operation = [[NSBlockOperation alloc] init];
[operation addExecutionBlock:^{
NSLog(@"NSBlockOperation--下载图片2--%@",[NSThread currentThread]);
}];
[operation addExecutionBlock:^{
NSLog(@"NSBlockOperation--下载图片3--%@",[NSThread currentThread]);
}];
//2.执行操作
[operation start];
/*
注意:只要NSBlockOperation封装的操作数>1,就会异步执行
*/
}
- (void)invocationOperation
{
//1.创建操作对象,封装要执行的任务
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(download) object:nil];
//2.执行操作(默认情况下,如果操作没有放到队列queue中,都是同步执行)
[operation start];
}
- (void)download
{
NSLog(@"download----%@",[NSThread currentThread]);
}
- (void)run
{
NSLog(@"run----%@",[NSThread currentThread]);
}
@end
NSOperation的基本使用
最新推荐文章于 2020-08-24 15:01:33 发布