应用程序大多是用Swift编写的,带有一些Objective-C代码。最近我发现将蓝牙键盘连接到iPad会导致这个应用程序严重的2秒以上挂起。
使用Time Profiler暴露了导致挂起的函数(下面的回溯),但我的问题是如何阻止这种情况的发生?CPU使用率也达到了100%。
这些挂起只会在蓝牙键盘连接iPad时发生,如果我关闭iPad上的蓝牙,它就会恢复流畅运行。
当我尝试触摸屏幕上的UI时,它似乎挂起,但触发挂起的操作并不总是相同的。
我试图覆盖UIKit.UIFocus周围的这些方法/变量,但没有任何效果:
- updateFocusIfNeeded -尽管处于回溯中,但从未命中
- shouldUpdateFocus -从未命中
- enumeratePreferredFocusEnvironments -返回空数组并命中,但仍循环并挂起应用程序
iPad运行iOS 16.3
1条答案
按热度按时间w6mmgewl1#
我能够通过在挂起的UIViewController上添加一个微小、清晰的UITextField来解决挂起问题。
UIKit focusEnvironment代码似乎在所有视图中循环,寻找键盘的焦点,但由于没有任何内容可供键入,因此搜索时间长到足以挂起应用程序。现在我添加了UITextField,它找到了焦点并停止循环。