Rumah > Soal Jawab > teks badan
我发现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)
{
}
}
按顺序取出
滿天的星座2017-04-27 09:05:07
maxConcurrentOperationCount pasti akan berfungsi. Siri antara muka satu langkah, anda perlu menghantar masa (pembolehubah keadaan, isyarat, dll.) selepas menerima panggilan balik
天蓬老师2017-04-27 09:05:07
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 operation
dilaksanakan 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.