gpt4 book ai didi

ios - NSURLSessionTask completionTask 永远不会使用 GCD 在主队列中调用

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

我正在使用 iOS 7 NSURLSession 对 RESTful 服务执行一些简单的 GET。这就是我所做的:

NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration ephemeralSessionConfiguration];
_session = [NSURLSession sessionWithConfiguration:sessionConfig delegate:nil delegateQueue:[NSOperationQueue mainQueue]];

// create your url at this line
NSURLRequest *request = [NSURLRequest requestWithURL:url];

NSURLSessionTask *task = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// do something with the result
}];
[task resume];

以上所有代码都可以正常工作。 completionHandler 应该在主队列中被调用。

但是,如果我在 GCD 中使用它,就像这样:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// do some heavylifting in the background

for (int i = 0; i < 10000000; i++) ;

dispatch_async(dispatch_get_main_queue(), ^{
// do the exact same thing as the above NSURLSession call
NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration ephemeralSessionConfiguration];
_session = [NSURLSession sessionWithConfiguration:sessionConfig delegate:nil delegateQueue:[NSOperationQueue mainQueue]];

// create your url at this line
NSURLRequest *request = [NSURLRequest requestWithURL:url];

NSURLSessionTask *task = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// do something with the result
}];
[task resume];
});
});

现在,我想我在 dispatch_get_main_queue() 中运行该代码,它应该与 session 的 delegateQueue 中指定的 [NSOperationQueue mainQueue] 相同? Tt 应该像第一组代码一样有效地在主线程中运行。但是,我发现从未调用过 completionHandler。如果我删除 GCD 代码,它会再次运行。

有没有人试过这样做?这应该工作吗?或者我误解了工作分配到哪个队列?

最佳答案

AFAIK,所有 NSURLSession 回调都发生在只读 NSURLSession 指定的队列上。 delegateQueue 属性 ( docs ),可以在初始化时指定。

关于ios - NSURLSessionTask completionTask 永远不会使用 GCD 在主队列中调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21155469/

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