gpt4 book ai didi

iphone - 为 NSOperationQueue 设置并发操作只会导致该数量的操作

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:17 26 4
gpt4 key购买 nike

MyI 有一个带有 NSOperation 对象的 NSOperationQueue

NSOperationQueue *aQueue = [[ NSOperationQueue alloc ] init];
[aQueue setMaxConcurrentOperationCount:3];

for (int index=0; index<=5; index++) {
MYOperation *anOperation = [[MYOperation alloc] init];//MYOperation subclass from NSOperation
[aQueue addOperation:anOperation];
}
NSLog(@"Number of Operations:%d",[aQueue operationCount]);//It gives 5 count

队列一次只允许执行 3 个操作(根据定义)。当我尝试添加第 4 个操作时,它添加到队列中,但该操作从未执行并被丢弃。

问题:为什么 Queue 丢弃的操作超过其并发值?

最佳答案

NSOperationQueue 管理一个线程在后台执行提交的操作。 (从 10.6 开始使用 Grand Central Dispatch)。默认情况下,提交的操作在辅助线程上执行。
您在提交一批操作后立即查询操作队列——此时队列可能尚未开始执行操作,因此正确报告总操作数为 6。
如果您在查询队列之前添加一些延迟,它可能已经完成所有操作并报告计数为 0。

示例代码:

NSOperationQueue *aQueue = [[ NSOperationQueue alloc ] init];
[aQueue setMaxConcurrentOperationCount:3];

for (int index=0; index<=5; index++) {
MYOperation *anOperation = [[MYOperation alloc] init];//MYOperation subclass from NSOperation
[aQueue addOperation:anOperation];
}

double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
NSLog(@"Number of Operations:%d",[aQueue operationCount]);//It gives 5 count
});

关于iphone - 为 NSOperationQueue 设置并发操作只会导致该数量的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16671606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com