Ios 如何处理对UI来说太快的更新?

Ios 如何处理对UI来说太快的更新?,ios,swift,uilabel,Ios,Swift,Uilabel,我正在循环更新UILabel,如下所示: DispatchQueue.main.async { self.runningLabelView.text = text } text正在循环中每秒更新60次,总共1秒 这对于UI来说似乎太快了,因为文本在前1秒后几秒钟内不断更新 我是否可以在此循环期间跳过任何挂起的文本更新,以便文本更新随着循环的完成而完成?您的问题是,在将闭包添加到调度队列时,而不是在执行闭包时捕获text的值。这意味着每个单独的文本赋值将按顺序进行 一种解决方案是使用属性

我正在循环更新UILabel,如下所示:

DispatchQueue.main.async {
    self.runningLabelView.text = text
}
text
正在循环中每秒更新60次,总共1秒

这对于UI来说似乎太快了,因为文本在前1秒后几秒钟内不断更新


我是否可以在此循环期间跳过任何挂起的文本更新,以便文本更新随着循环的完成而完成?

您的问题是,在将闭包添加到调度队列时,而不是在执行闭包时捕获
text
的值。这意味着每个单独的文本赋值将按顺序进行

一种解决方案是使用属性而不是捕获的局部变量。这样,标签将设置为当前特性值,而不是过时的捕获值:

self.messageText = someNewValue
DispatchQueue.main.async {
    self.runningLabelView.text = self.messageText
}

另一种可能更好的方法是调度更少的更新,但您需要提供更多信息。

您的问题是,在将闭包添加到调度队列时捕获
文本的值,而不是在执行闭包时捕获。这意味着每个单独的文本赋值将按顺序进行

一种解决方案是使用属性而不是捕获的局部变量。这样,标签将设置为当前特性值,而不是过时的捕获值:

self.messageText = someNewValue
DispatchQueue.main.async {
    self.runningLabelView.text = self.messageText
}

另一种可能更好的方法是发送更少的更新,但您需要提供更多信息。

您需要显示更多代码。这里没有上下文,请考虑将文本更新与屏幕刷新同步。请查看CADisplayLink。()您需要显示更多代码。这里没有上下文,请考虑将文本更新与屏幕刷新同步。请查看CADisplayLink。()