我的应用程序可能会在iOS 11,iPhone 6 Plus中放慢速度。(其他iOS按预期运行。)
我知道sectrustevaluate()方法是使应用程序减慢的原因。我在主线程中运行大约3秒钟。因此,我使用GCD将其移至背景线程。
- (void)URLSession:(NSURLSession *)session didReceiveChallenge(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
BOOL allowConnect = //Server Trust Evaluation in here
dispatch_async( dispatch_get_main_queue(), ^{
if (allowConnect) {
//completionHandler;
} else {
//cancel
}
});
});
}
}
然后,它不会阻止UI,而是需要20秒钟的服务器信任验证。
有人知道这个问题吗?请帮我。谢谢。
我配置了我的问题。这与iOS 11无关。这是我的错。
我在同一主机上为每个安全下载图像请求创建一个nsurlsession。因为TLS会话在计算上很昂贵,因此我的应用程序会减慢。我的解决方案是为所有下载请求创建一个会话。因此,评估服务器证书的结果将被缓存,下一个请求(在同一主机,端口上)您不需要评估服务器信任。
更多信息:https://developer.apple.com/library/content/qa/qa1727/_index.html
为什么每个域一次挑战一次https nsurlsession连接?