前言
最近在開發中遇到了一些問題,發現iOS 10撥打系統電話發現彈出框會延遲2s左右出現,很不爽,研究了一下,發現是openURL在iOS 10及其之后會阻塞主線程
所以,撥打電話前,做個判斷,下面話不多說了,來一起看看詳細的介紹吧。
示例代碼:
// 撥打電話 + (void)callPhone:(NSString *)phoneNum { if ([ISNULL(phoneNum) length] == 0) { [SVProgressHUD showErrorWithStatus:@"撥打失敗,手機號碼不存在" duration:1.0 dismiss:nil]; return; } NSString *callPhone = [NSString stringWithFormat:@"telprompt://%@", phoneNum]; /// 解決iOS10及其以上系統彈出撥號框延遲的問題 /// 方案一 if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) { /// 10及其以上系統 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone] options:@{} completionHandler:nil]; } else { /// 10以下系統 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone]]; } /// 方案二 // dispatch_async(dispatch_get_global_queue(0, 0), ^{ // [[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone]]; // }); }
關于撥打電話的方法,導致彈出框延遲的原因,目前初步診斷就是openURL在iOS 10及其之后會阻塞主線程,方案二在iOS 11上不起作用
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。
新聞熱點
疑難解答