objective-c - NSOperationQueue中如何实现按顺序单个执行
ringa_lee
ringa_lee 2017-04-27 09:03:07
0
2
465

我发现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)
     {

     }

}

按顺序取出

ringa_lee
ringa_lee

ringa_lee

membalas semua(2)
滿天的星座

maxConcurrentOperationCount pasti akan berfungsi. Siri antara muka satu langkah, anda perlu menghantar masa (pembolehubah keadaan, isyarat, dll.) selepas menerima panggilan balik

Peter_Zhu

maxConcurrentOperationCount=1 hanya boleh menjamin bahawa hanya satu operation dilaksanakan pada satu masa, tetapi ia tidak menjamin bahawa semua operation yang ditambahkan akan dilaksanakan dalam susunan yang ketat.
Jika anda memerlukan semua operationdilaksanakan mengikut urutan yang ketat, cara paling mudah ialah menambah kebergantungan pada setiap operation yang ditambahkan.
Sesuatu seperti ini:

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

Setakat soalan dalam soalan anda, walaupun panggilan balik terakhir bagi dua fungsi yang anda berikan adalah tak segerak, ini tidak bermakna ia tidak boleh dilaksanakan menggunakan operation.

Anda boleh mensubkelaskan NSOperation sendiri, melakukan operasi tak segerak dan menamatkan operation dalam panggilan balik.
Panggilan tak segerak sebegini ditukar menjadi operation dan kaedah menambah kebergantungan di atas juga boleh digunakan untuk mencapai pelaksanaan berurutan yang ketat.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan