gpt4 book ai didi

ios - “addDependency”在iOS中无法正常工作

转载 作者:行者123 更新时间:2023-12-01 20:02:01 24 4
gpt4 key购买 nike

我有两个NSOperation对象“A”和“B”,并且要使用依赖项,因为我需要先让完整的“B”然后再启动“A”。

- (void)viewDidLoad {
[super viewDidLoad];

NSOperationQueue *myQueue = [NSOperationQueue new];
NSOperation *op1 = [[NSOperation alloc] init]; // Its a background(concurrent) thread.
op1.completionBlock =^{
NSLog(@"A");
};

NSOperation *op2 = [[NSOperation alloc] init];
op2.completionBlock =^{

NSLog(@"B");
};
[op1 addDependency:op2];
[myQueue addOperation:op1];
[myQueue addOperation:op2];
}

预期产量:
 B
A

但有时:
 A
B

但是我想先完成B,然后再开始A。请帮助我。

最佳答案

在这里,完成块不是队列的一部分,而是在另一个线程上的操作队列之外运行。因此,操作A的completeBlock将与操作B同时运行。

根据您的问题,您正在使用completionBlocks将信息从操作A传递到B。

以下是一些解决方案:

  • 给B引用所有A的引用(不弱),因此B运行时可以从操作A中选择结果。
  • 保留所有A操作,直到B运行,然后将完成块重新创建为另一个NSOperation,请参见下面的代码:

  • NSOperation *operA = [NSBlockOperation blockOperationWithBlock:^{ // do stuff 
    }];

    NSOperation *operationATail = [NSBlockOperation blockOperationWithBlock:^{ // do completionBlock stuff
    }];

    // First bullet point
    [operationATail addDependency:operA];

    // Second bullet point
    [operationB addDependency:operationATail];

    [self.queue addOperations:@[operA, operationATail, operationB] waitUntilFinished:NO];

    关于ios - “addDependency”在iOS中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39778151/

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