NSOperation和NSOperationQueue

NSOperation本身是抽象基类,因此必须使用它的子类,使用NSOperation子类的方式有2种:

1> Foundation框架提供了两个具体子类直接供我们使用:NSInvocationOperation和NSBlockOperation

2> 自定义子类继承NSOperation,实现内部相应的方法

一.NSInvocationOperation

基于一个对象和selector来创建操作。如果你已经有现有的方法来执行需要的任务,就可以使用这个类。

  1. NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run) object:nil];  
    // 开始执行任务(同步执行)  
    [operation start];  

二.NSBlockOperation

能够并发地执行一个或多个block对象,所有相关的block都执行完之后,操作才算完成。NSBlockOperation比NSInvocationOperation更加灵活。

  1. NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^(){  
            NSLog(@"执行了一个新的操作,线程:%@", [NSThread currentThread]);  
    }];  
     // 开始执行任务(这里还是同步执行)  
    [operation start];  

     

  通过addExecutionBlock方法添加block操作

  1. NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^(){  
        NSLog(@"执行第1次操作,线程:%@", [NSThread currentThread]);  
    }];  
      
    [operation addExecutionBlock:^() {  
        NSLog(@"又执行了1个新的操作,线程:%@", [NSThread currentThread]);  
    }];  
    // 开始执行任务  
    [operation start];  

     

设置操作的依赖关系:

    利用 " addDependency "可以指定操作之间彼此的依赖关系(执行先后顺序),但是注意不要出现循环依赖.

设置同时并发的线程数量: [self.myQueue setMaxConcurrentOperationCount:2];

cancel和cancelAllOperations默认情况下,都不能取消已经正在执行的operation,只能取消在队列中等待的operation,如果硬要取消正在执行的,只能重写operation的main方法,并在main方法中添加对isCancel属性的监控

大多用自定义NSOperation。

转载于:https://www.cnblogs.com/xing-li/p/4520325.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值