gpt4 book ai didi

ios - 在 For 循环之后添加具有依赖项的 NSOperation

转载 作者:行者123 更新时间:2023-11-28 22:03:37 29 4
gpt4 key购买 nike

所以我试图在所有 block 操作之后执行 lastOperation,但由于某种原因它首先被执行。为什么是这样?添加依赖项的方法是错误的吗?

[self facebookAccount:^(NSError *error, ACAccount *facebookAccount) {
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue setMaxConcurrentOperationCount:1];
NSBlockOperation *lastOperation = [NSBlockOperation blockOperationWithBlock:completionAll];
for (NSString *postID in postIDs) {
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
NSString *postIDString = [NSString stringWithFormat:@"https://graph.facebook.com/v2.0/%@", postID];
NSURL *postIDURL = [NSURL URLWithString:postIDString];
SLRequest *postIDRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodGET URL:postIDURL parameters:nil];
postIDRequest.account = facebookAccount;

[postIDRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
NSError *parseError;
NSDictionary *response = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:&parseError];

completion(response);
}];

}];
[queue addOperation:operation];
[lastOperation addDependency:operation];
}

[queue addOperation:lastOperation];

}];

如果我在 [self facebookAccount:^(NSError *error, ACAccount *facebookAccount)] 中添加以下代码:

[RACObserve(queue, operationCount) subscribeNext:^(id x) {
NSLog(@"Operation count for queue: %@", x);
}];

然后输出到控制台是:

http://i.imgur.com/efrouOC.png (抱歉我不能发图片,但我会尽快提高我的声誉)

“全部完成”的位置通常在 5 到 10 之间变化。所以我很确定这取决于哪些 NSOperations 在队列到达 lastOperation 之前完成处理 GET 请求。

最佳答案

我猜 performRequestWithHandler: 会立即返回,因为它需要一个回调 block 作为它的参数。一旦 NSBlockOperation 的 block 返回,该操作就被认为已完成,因此您的所有操作都会立即完成,并且只会在稍后调用它们的完成 block 。

您可能需要继承 NSOperation 并实现并发方法(至少:startisConcurrentisExecutingisFinished) 而不是非并发方法(最小值:main)。来自 performRequestWithHandler: 的回调应该触发状态相关属性的键值通知,以指示 NSOperation 已完成。

关于ios - 在 For 循环之后添加具有依赖项的 NSOperation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24515017/

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