gpt4 book ai didi

iphone - GCD 与 NSURLConnection

转载 作者:可可西里 更新时间:2023-11-01 03:31:21 26 4
gpt4 key购买 nike

我正在使用 GCD 异步发送 HTTP 请求。这是不起作用的代码:

dispatch_async(connectionQueue, ^{
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];

[request setURL:[NSURL URLWithString:[NSString stringWithFormat:someURL]]];


NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection start];//Not working
});

上面的代码根本不起作用。我在 NSURLConnectionDelegate 的方法中没有收到任何回电。

但是当我尝试下面的代码时,一切正常并且我得到了正确的回调

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];

[request setURL:[NSURL URLWithString:[NSString stringWithFormat:someURL]]];

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

dispatch_async(connectionQueue, ^{

[connection start]; // working fine. But WHY ????
});

有人可以解释 block/GCD 的这种奇怪行为吗?

最佳答案

在您的代码示例的第一部分试试这个-

dispatch_async(dispatch_get_main_queue(), ^(void){
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection start];
}

如果您将连接放在后台队列中,它会在队列完成后被推走,因此您无法获得委托(delegate)回调。连接可以在主队列中,因此它停留在主运行循环中以进行回调。或者,您可以创建自己的运行循环来按照其他人的建议为您处理后台操作。

关于iphone - GCD 与 NSURLConnection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13071978/

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