应该总是在主线程上调用 becomeFirstResponder() 吗?

Posted

技术标签:

【中文标题】应该总是在主线程上调用 becomeFirstResponder() 吗?【英文标题】:Should becomeFirstResponder() always be called on the main thread? 【发布时间】:2017-10-16 11:24:03 【问题描述】:

是否应该始终在主线程上调用 becomeFirstResponder()?

DispatchQueue.main.async 
         self.inputBarView.placeholderTextView.becomeFirstResponder()

我已经修复了一个闪烁问题,并且在我确定在主线程上调用了该方法后,动画变得更加流畅。

但是,我不确定这是否正确。

【问题讨论】:

没有说它应该总是在主线程上调用,但是文档中有一些东西说该方法应该只在视图的一部分上调用活动视图层次结构。有关更多详细信息,请参阅developer.apple.com/documentation/uikit/uiresponder/…,但如果您也显示动画代码也会很有帮助,因为可能存在潜在问题。 【参考方案1】:

可能使您的动画更流畅的原因不是您在主线程中调用becomeFirstResponder,而是可能因为当您的placeholderTextView 成为第一响应者时触发的动画正在主线程上执行。

您应该确保所有动画和 UI 更新都在主线程中进行,而不是在主线程中调用 becomeFirstResponder,而不是在触发这些更改的函数中进行。

【讨论】:

以上是关于应该总是在主线程上调用 becomeFirstResponder() 吗?的主要内容,如果未能解决你的问题,请参考以下文章

NSAsynchronousFetchRequest - 应该在主线程上显式更新

在主线程上调用方法?

为啥在主线程上调用东西是程序员的责任?

-[GCKCastDeviceProvider stopDiscovery] 必须在主线程上调用

iOS - 确保在主线程上执行[重复]

csharp 在主线程上调用