NSOperation的基本使用

本文详细介绍了如何使用NSOperation和NSOperationQueue实现多线程编程,包括封装操作、创建队列、添加操作到队列以及执行操作的具体步骤。通过实例展示了NSInvocationOperation、NSBlockOperation和invocationOperation的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//
//  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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值