UITextField / UITextView - iOS 11 - 高 CPU 使用率

Posted

技术标签:

【中文标题】UITextField / UITextView - iOS 11 - 高 CPU 使用率【英文标题】:UITextField / UITextView - iOS 11 - High CPU Usage 【发布时间】:2017-10-19 08:18:43 【问题描述】:

我认为我在 ios 11 中使用 Objective-C 发现了一个错误。如果您创建一个包含大量文本字段或文本视图的空项目,您会看到 CPU 使用率失控。通过 Instruments,我发现即使您解除分配文本字段,使光标/插入符号闪烁的事件也会继续被调用。

我有一个大项目,表格的每一行都有 2 个文本字段,但我真的不知道如何解决它。具有讽刺意味的是,即使您没有看到闪烁的光标,也会调用此事件。

有人遇到过这个问题吗?

这就是所谓的:

 Main Thread
      start
           0x100b2fcde
                UIApplicationMain
                     GSEventRunModal
                          CFRunLoopRunSpecific
                               _CFRunLoopRun
                                    _CFRunLoopDoTimer
                                         _DFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION_
                                              _NFFireTimer
                                                   -[UITextSelectionView caretBlinkTimerFired:]
                48%                                    - [UITextSelectionView showCaret:]
                48%                                   -[UITextSelectView hideCaret:]

附: 我在 iOS 10.3 上尝试了相同的程序,它运行良好。

【问题讨论】:

我在 iOS 11.0.3 上测试我的应用时遇到了同样的错误。我用仪器分析了 CPU 使用率,发现每次 UITextView 聚焦时,都会不断调用 UITextView 方法并增加 CPU 使用率。不幸的是,等待下一个 iOS 版本。 我在 Apple Bug Reporter 官方网站上打开了一份报告,在这里我们正在讨论它:forums.developer.apple.com/thread/89616?sr=stream&ru=593697 【参考方案1】:

在 Apple 修复它之前,我看到用空白字符串 @" " 替换文本字段文本可以解决问题。

【讨论】:

是的,我在 Apple 论坛上看到了它,仍然希望他们能尽快修复它,因为我有大量的 textview/textfields。谢谢!【参考方案2】:

根据我的测试,随着 iOS 更新 11.1,问题似乎得到了解决。通过此次更新,当 UITextView 或 UIExField 失去焦点时,CPU 使用率会降低。

【讨论】:

在 11.1 测试版中也是如此。我会试试官方版本的。

以上是关于UITextField / UITextView - iOS 11 - 高 CPU 使用率的主要内容,如果未能解决你的问题,请参考以下文章

为啥 UITextview 没有 UITextField 之类的占位符属性 [重复]

在 uitextfield 和 uitextview 上添加内阴影

更改 UITextField 和 UITextView 光标/插入符号颜色

IQKeyboardManager 从 UITextField 导航到 UITextView

UILabel UITextField UITextView

将 UItextField 和 UITextView 添加到 UIAlertView