iOS多线程小结( NSOperation)

一) NSOperation使用方法:

NSOperation 实例封装了需要执行的操作和执行操作所需的数据,并且能够以并发或非并发的方式执行这个操作。NSOperation在ios4后也基于GCD实现,但是相对于GCD来说可控性更强,并且可以加入操作依赖。NSOperation提供了ready, cancelled, executing, finished这几个状态变化,我们的开发也是必须处理自己关心的其中的状态。这些状态都是基于keypath的KVO通知决定,所以在你手动改变自己关心的状态时,请别忘了手动发送通知。这里面每个属性都是相互独立的,同时只可能有一个状态是YES。finished这个状态在操作完成后请及时设置为YES,因为NSOperationQueue所管理的队列中,只有isFinished为YES时才将其移除队列,这点在内存管理和避免死锁很关键。

1.NSInvocationOperation:

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

[op start]; //开始
[op cancel];//取消

2 NSBlockOperation

  NSBlockOperation *block = [NSBlockOperation     blockOperationWithBlock:^{
     NSLog(@"%@",[NSThread currentThread]); //处理线程的block方法
 }];

3 NSOperationQueue

一个NSOperation对象可以通过调用start方法来执行任务,默认是同步执行的。也可以将NSOperation添加到一个NSOperationQueue(操作队列)中去执行,而且是异步执行的。一旦NSoperation添加到NSoperationQueue中,用户就无权对NSoperation管理,都有NSoperationQueue来执行。

3.1 添加一个队列

 NSoperationQueue *myQueue = [[NSOperationQueue alloc]init];
    NSInvocationOperation *op = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download:) object:nil];
    [myQueue addOperation:op];

3.2 主队列(任何刷新UI的方法都必须在主队列中执行)

  [[NSOperationQueue mainQueue]addOperationWithBlock:^{
        //可以执行刷新UI控件的方法
    }];

3.3 队列直接可以设置依赖,比如队列1需要队列2执行完毕后才能执行(addDependency)

  NSBlockOperation *block1 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"%@",[NSThread currentThread]);
    }];

    NSBlockOperation *block2 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"%@",[NSThread currentThread]);
   }];
 [block1 addDependency:block2];
   [myQueue addOperation:block1];
   [myQueue addOperation:block2];

3.4可以设置最大并发的操作数量

    [myQueue setMaxConcurrentOperationCount:2];

3.5 一旦添加到队列,队列就拥有了这个Operation对象并且不能被 删除,唯一能做的事情是取消。

 [myQueue cancelAllOperations];

3.6获取NSOperation
myQueue.operations 这是一个数组,里面存放这添加进入这个队列的所有任务

3.7 如果你想临时暂停Operations的执行,可以使用queue的setSuspended:方法暂停queue。

   [myQueue setSuspended:YES];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值