gpt4 book ai didi

ios - UIAlertController 的呈现非常缓慢

转载 作者:可可西里 更新时间:2023-11-01 00:57:30 24 4
gpt4 key购买 nike

最近让我印象深刻的一件事是 UIAlertController 在其中呈现大量元素时的速度有多慢。

我的 for 循环迭代了 400 多个元素。我检查了一下,循环只用了几分之一秒,但是 UIAlertController 的显示时间超过 16 秒!!

我附上了 Time Profiler 输出以支持我所写的内容。问题是 - 是否有任何方法可以提高此组件的速度,或者是否有 UIAlertController 的任何替代品(自定义库),这在性能方面更好?

DispatchQueue.global(qos: .userInitiated).async {

for item in items {
let button = UIAlertAction(title: item.title, style: .default, handler: { (alertAction) in
// alert action
})
menuValueSelectionController.addAction(button)
}


DispatchQueue.main.async {
if let popoverController = menuValueSelectionController.popoverPresentationController {
popoverController.sourceView = sender
popoverController.sourceRect = sender.bounds
}

menuValueSelectionController.view.layoutIfNeeded()
self.present(menuValueSelectionController, animated: true, completion: nil)
}
}

time profiler output

最佳答案

我怀疑 UIAlertController.addAction() 不是线程安全的。 UIAlertAction 初始化程序可能两者都不是。

从后台调用非线程安全的 UIKit 方法是在 UI 更改生效之前长时间暂停的常见原因。我建议去掉 DispatchQueue.global().async 包装器。我敢打赌延迟会大幅下降。

也就是说,400 个警报操作似乎太多了,无法尝试放入警报 Controller 中。您可能需要寻找另一种方法。

关于ios - UIAlertController 的呈现非常缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42417808/

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