我发现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
は、一度に 1 つのoperation
のみが実行されることのみを保証しますが、追加されたすべてのoperation
が実行されることは保証しません厳密に順序通りに。追加されたすべての
operation
を厳密に順序どおりに実行する必要がある場合、最も簡単な方法は、追加された各operation
に依存関係を追加することです。これと同様:
maxConcurrentOperationCount=1
只能保证一次只有一个operation
在执行,但并不能够保证将所有加入的operation
严格按序执行。如果需要让加入的所有
operation
都严格按序执行的话,最简单的方法就是每次给加入的operation
都加dependency。类似这样:
就你题目中的问题来看,虽然你给出的两个函数最后的回调都是异步的,但并不是不能套用
operation
来实现。你可以自己来子类化一个
あなたの質問に関する限り、あなたが指定した2つの関数の最終コールバックは非同期ですが、NSOperation
,执行异步操作然后在回调里面把operation
结束掉。这样一个异步的调用就转成了一个
operation
リーリーoperation
を使用して実装できないという意味ではありません。 🎜 🎜NSOperation
を自分でサブクラス化し、非同期操作を実行して、コールバックでoperation
を終了することができます。このような非同期呼び出しは
operation
に変換され、依存関係を追加する上記の方法を適用して厳密な逐次実行を実現することもできます。 🎜