我的应用程序在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秒才能进行服务器信任验证。
有人能知道这个问题吗?请帮我。谢谢。
答案 0 :(得分:0)
我配置了我的问题。这与iOS 11无关。这是我的错。
我为同一主机上的每个安全下载映像请求创建一个NSURLSession。 因为TLS会话的计算成本很高,所以我的应用程序会变慢。 我的解决方案是为所有下载请求只创建一个会话。 因此,评估服务器证书的结果将被缓存,并且下一个请求(在同一主机,端口上)您不需要评估服务器信任。
更多信息: https://developer.apple.com/library/content/qa/qa1727/_index.html
Why is a HTTPS NSURLSession connection only challenged once per domain?