搜尋

首頁  >  問答  >  主體

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 天前463

全部回覆(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
  • 取消回覆