NSOperation NSOperationQueue

NSOperation NSOperationQueue

NSInvocationOperation

  • addDependency:
    主要介绍一下这个方法。
    [op1 addDependency:op2];op1添加依赖。在op2执行完成后才开始执行op1。此方法会忽略添加进NSOperationQueue的顺序。

NSOperationQueue

并行执行,先添加进的任务先执行。默认情况下根据addOperation:添加的先后顺序来执行任务,如果任务本身设置了依赖关系,则按照任务设置的依赖关系来执行。
maxConcurrentOperationCount属性可以设置队列的最大并发任务。

示例

- (void)nsoperationTest{
    NSInvocationOperation *operation1 = [[NSInvocationOperation alloc]initWithTarget:self
                                                                           selector:@selector(somethingNeedTime:)
                                                                             object:@"任务1"];
    NSInvocationOperation *operation2 = [[NSInvocationOperation alloc]initWithTarget:self
                                                                           selector:@selector(somethingNeedTime:)
                                                                             object:@"任务2"];
    //[operation1 addDependency:operation2];
    NSOperationQueue *operationQueue = [[NSOperationQueue alloc]init];
    [operationQueue addOperation:operation1];

    [operationQueue addOperation:operation2];

    NSLog(@"已经添加完成任务");
}

-(void)somethingNeedTime:(NSString *)param{
    NSLog(@"开始执行耗时任务:%@",param);
    sleep(10);
    NSLog(@"结束执行耗时任务:%@",param);
}

执行结果:

已经添加完成任务
开始执行耗时任务:任务1
开始执行耗时任务:任务2
结束执行耗时任务:任务1
结束执行耗时任务:任务2

我们现在设置下两个任务的依赖关系,此处要注意在添加到队列之前设置依赖关系哦!

- (void)nsoperationTest{
    NSInvocationOperation *operation1 = [[NSInvocationOperation alloc]initWithTarget:self
                                                                           selector:@selector(somethingNeedTime:)
                                                                             object:@"任务1"];
    NSInvocationOperation *operation2 = [[NSInvocationOperation alloc]initWithTarget:self
                                                                           selector:@selector(somethingNeedTime:)
                                                                             object:@"任务2"];
    [operation1 addDependency:operation2];
    NSOperationQueue *operationQueue = [[NSOperationQueue alloc]init];
    [operationQueue addOperation:operation1];

    [operationQueue addOperation:operation2];

    NSLog(@"已经添加完成任务");
}

-(void)somethingNeedTime:(NSString *)param{
    NSLog(@"开始执行耗时任务:%@",param);
    sleep(10);
    NSLog(@"结束执行耗时任务:%@",param);
}

再来看看打印结果:

已经添加完成任务
开始执行耗时任务:任务2
结束执行耗时任务:任务2
开始执行耗时任务:任务1
结束执行耗时任务:任务1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值