搜索

首页  >  问答  >  正文

objective-c - NSOperationQueue中如何实现按顺序单个执行

我发现maxConcurrentOperationCount=1并不管用 虽然网上搜到一大堆说添加依赖能解决问题 但现实中有如下api

CMStepCounter ios8苹果计步器

都是异步回调的

怎么实现如下功能

for(int i = 0; i< 24 ;i ++)
{
[_stepCounter queryStepCountStartingFrom:fromDate

           to:toDate                                                    
           toQueue:_timeQueue
           withHandler:^(NSInteger numberOfSteps, NSError *error)
     {

     }

}

按顺序取出

ringa_leeringa_lee2763 天前468

全部回复(2)我来回复

  • 滿天的星座

    滿天的星座2017-04-27 09:05:07

    maxConcurrentOperationCount肯定是管用的,一步接口串行之行,你要在收到回调后发送时间(条件变量,信号等)

    回复
    0
  • 天蓬老师

    天蓬老师2017-04-27 09:05:07

    maxConcurrentOperationCount=1只能保证一次只有一个operation在执行,但并不能够保证将所有加入的operation严格按序执行。
    如果需要让加入的所有operation都严格按序执行的话,最简单的方法就是每次给加入的operation都加dependency。
    类似这样:

    NSOperation *operationToAdd;
    NSOperation *lastOperation = queue.operations.lastObject;
    if (lastOperation) {
        [operationToAdd addDependency:lastOperation];
    }
    [queue addOperation:operationToAdd];

    就你题目中的问题来看,虽然你给出的两个函数最后的回调都是异步的,但并不是不能套用operation来实现。

    你可以自己来子类化一个NSOperation,执行异步操作然后在回调里面把NSOperation,执行异步操作然后在回调里面把operation结束掉。
    这样一个异步的调用就转成了一个operation结束掉。

    这样一个异步的调用就转成了一个🎜,并且也是可以套用上面的添加依赖的方法实现严格按序执行的。🎜

    回复
    0
  • 取消回复