iosNSOperation的简单用法

今天身心疲惫啊,这几天跑的腿都软了,有上海的朋友吗?我在找工作,需要一份工作,求看见的同行帮我留意下。非常感谢。我的qq就是820203420.同时也希望能够继续给大家带来更好的文章,有时间我会开源一个项目,希望大家留意,或者可以联系我,我们一起开源。晚安。

#import "ViewController.h"


@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];


    

#if 0

    //    NSOperation / NSOperationQueue  是基于GCD封装的面向对象的多线程类  GCD是纯c语言  GCD相对来说高效些

    

    //NSOperation / NSOperationQueue 开发步骤

    // 1. 创建NSOperation对象,该对象中封装任务。

    // 2. 创建NSOperationQueue操作队列,将NSOperation对象扔入到操作队列中。

    // 3. 将操作加入到操作队列后,系统会自动的将队列中的操作拿出来放到线程上执行。

    

    //NSOperation 是一个抽象类(不能实例化对象的类)。他有两个子类

    //    NSInvocationOperation

    //    NSBlockOperation

    // 创建操作对象时,必须使用这些子类来实例化

    

    // NSOperationQueue 操作队列只有两种,

    // 1. 自定义操作队列,通过alloc init创建的。这个队列的任务在子线程中并发执行。

    // 2. 主队列  GCD的主队列相似, 添加到主队列中得任务,都会在主线程中执行。

    //    [NSOperationQueue mainQueue]; 获取主队列的方式

    

    //创建操作对象,该对象中封装任务。

    NSInvocationOperation *invOperation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test) object:nil];

    

    //执行操作中得任务。 默认情况下在主线程中执行

    [invOperation start];

    

    

    // 创建操作,任务保存在block

    NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{

        NSLog(@"blockOperation thread = %@",[NSThread currentThread]);

    }];

    

    for (int i = 0; i<10; i++) {

        [blockOperation addExecutionBlock:^{

            NSLog(@"blockOperation %d thread = %@",i,[NSThread currentThread]);

        }];

    }

    

    //执行操作中得任务。 默认情况下在主线程中执行,如果blockOperation中的任务个数大于1,其他的任务在子线程中执行

    [blockOperation start];

 

#else

    

    //    ----------   实际使用 ------------------

    // 1. 创建操作对象

    

    NSInvocationOperation *invocationOp = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test) object:nil];

    NSBlockOperation *blockOp = [NSBlockOperation blockOperationWithBlock:^{

        for (int i = 0; i<5; i++) {

            NSLog(@"blockOp thread = %@",[NSThread currentThread]);

        }

    }];

    

    // 2. 将操作对象加入操作队列中, 添加到队列中的任务,会自动在子线程中执行。

    // 创建操作队列

    NSOperationQueue *queue = [[NSOperationQueue alloc]init];

    [queue addOperation:invocationOp];

    [queue addOperation:blockOp];

    

    

    for (int i = 0; i<5; i++) {

        NSBlockOperation *bOp =  [NSBlockOperation blockOperationWithBlock:^{

            NSLog(@"blockOp i = %d thread = %@",i,[NSThread currentThread]);

        }];

        //添加到主队列中得任务,都在主线程中按顺序执行。

        //        [[NSOperationQueue mainQueue] addOperation:bOP];

    }

    

    

#endif

}

-(void)test

{

    

    

    for (int i = 0; i<5; i++) {

        NSLog(@"InvocationOperation thread = %@",[NSThread currentThread]);

    }

}

@end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值