我發現maxConcurrentOperationCount=1並不管用 雖然網上搜到一大堆說添加依賴能解決問題 但現實中有如下api
CMStepCounter ios8蘋果計步器
(void)queryStepCountStartingFrom:(NSDate *)start
to:(NSDate *)end
toQueue:(NSOperationQueue *)queue
withHandler:(CMStepQueryHandler)handler;
和CMMotionManager中方法
(void)startDeviceMotionUpdatesToQueue:(NSOperationQueue *)queue withHandler:(CMDeviceMotionHandler)handler
都是非同步回調的
怎麼實現如下功能
for(int i = 0; i< 24 ;i ++)
{
[_stepCounter queryStepCountStartingFrom:fromDate
to:toDate
toQueue:_timeQueue
withHandler:^(NSInteger numberOfSteps, NSError *error)
{
}
}
依序取出
maxConcurrentOperationCount肯定是管用的,一步接口串行之行,你要在收到回調後發送時間(條件變量,信號等)
maxConcurrentOperationCount=1
只能保证一次只有一个operation
在执行,但并不能够保证将所有加入的operation
严格按序执行。如果需要让加入的所有
operation
都严格按序执行的话,最简单的方法就是每次给加入的operation
都加dependency。類似:
就你題目中的問題來看,雖然你給的兩個函數最後的回呼都是非同步的,但並不是不能套用
operation
來實現。你可以自己來子類化一個
這樣一個非同步的呼叫就轉成了一個🎜,並且也是可以套用上面的添加依賴的方法實現嚴格按序執行的。 🎜NSOperation
,執行非同步操作然後在回調裡面把NSOperation
,执行异步操作然后在回调里面把operation
结束掉。这样一个异步的调用就转成了一个
operation
結束掉。