gpt4 book ai didi

ios - NSURLSession:同步任务挂起

转载 作者:行者123 更新时间:2023-11-29 01:13:43 25 4
gpt4 key购买 nike

我最近在我的代码中将 NSURLConnection 替换为 NSURLSession。由于我使用了许多同步 url 请求,而 NSURLSession 不支持一个,因此我使用信号量使 NSURLSessionDataTask 同步。我引用了这个链接:https://forums.developer.apple.com/thread/11519

我有一个以 NSURLSession 作为成员变量的单例“Network Manger”。 NSURLSession 仅实例化一次,并向其添加任务。

但现在同步请求会导致我的应用出现性能问题。发送同步请求时存在滞后和应用挂起。

她是对同步请求的调用:

NSURLResponse *urlResponse;
NSError *error;
id serverResponse=[[MyNetworkManager sharedInstance] synchronousDataTaskWithRequest:request
returningResponse:&urlResponse
error:&error];

如果我不将 NetworkManager 设为单例并每次都实例化它,一切都会完美运行。

MyNetworkManager *manger=[[MyNetworkManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] responseSerializer:nil];
NSURLResponse *urlResponse;
NSError *error;
id *serverResponse=[manger synchronousDataTaskWithRequest:request returningResponse:&urlResponse error:&error];

注意事项:

1.精确步骤:总共有 3 个(2 个异步和 1 个同步)NSURLSessionDataTasks。在第一个任务的完成处理程序中调用第二个异步任务。从第二个完成处理程序调用第三个同步任务。第三个任务被永远阻止,代码不会继续。

2.一切都发生在后台线程上。

为什么只有将同步数据任务添加到新的 NSURLSession 中才能工作?为什么添加到已经执行了两个数据任务的 NSURLSession 中不起作用?

最佳答案

当我过去使用信号量进行同步实现时,我遇到了类似的问题,这是该问题的原因:

我认为您的 HTTP 请求导致重定向,并且在 willPerformHTTPRedirection 方法中,您没有为新请求调用 completionHandler。尝试将方法实现为:

- (void)URLSession:(NSURLSession *)session
task:(NSURLSessionTask *)task
willPerformHTTPRedirection:(NSHTTPURLResponse *)response
newRequest:(NSURLRequest *)request
completionHandler:(void (^)(NSURLRequest *))completionHandler
{
NSLog(@"willPerformRedirection");
completionHandler(request);

}

关于ios - NSURLSession:同步任务挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35477841/

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