gpt4 book ai didi

ios - 更新 UILabel 看起来像是在浪费性能

转载 作者:行者123 更新时间:2023-11-29 03:50:41 25 4
gpt4 key购买 nike

我正在开发一个项目,我必须定期更新 UILabel 的文本(0.085f)。因此,我将标签的更新插入到如下循环中:

MetresNumber = MetresNumber + 0.25;
DisplayMetres.text = [NSString stringWithFormat:@"%07.0f", MetresNumber];

我精确地说“MetresNumber”是一个 float ,“DisplayMetres”是 UILabel。

这种代码的性能确实很差!令人难以置信的是,自从我添加了这些行之后,它的速度竟然变慢了。

我进行了一些搜索,发现了如下元素:

[DisplayMetres setNeedsDisplay];

但它并没有改变和更新标签上的文本。

它位于一个循环中,调用方式为:

timer = [NSTimer scheduledTimerWithTimeInterval:0.085 target:self selector:@selector(myLoop) userInfo:nil repeats:YES];

所以我的问题是,我的代码是否可以改进,以获得更好的性能,或者我应该忘记我的 UILabel 因为它太慢了?

谢谢!

最佳答案

  • (void)setNeedsLayout

当您想要调整 View subview 的布局时,请在应用程序的主线程上调用此方法。此方法记录请求并立即返回。由于此方法不会强制立即更新,而是等待下一个更新周期,因此您可以使用它在更新任何 View 之前使多个 View 的布局无效。这一行为允许您将所有布局更新合并到一个更新周期,这通常更有利于性能。

另一个问题是,当主线程跟踪触摸时,不会调用 ScheduledTimer。您需要在主运行循环中安排计时器。

所以而不是这样做

[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateLabel:) userInfo:nil repeats:YES];

使用

NSTimer* timer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(updateLabel:) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

还可以使用如下所示的计时器选择器方法:

- (void) updateLabel:(id) sender {
MetresNumber = MetresNumber + 0.25;
NSString *text = [NSString stringWithFormat:@"%07.0f", MetresNumber];
dispatch_sync(dispatch_get_main_queue(), ^{
DisplayMetres.text = text;
});

}

关于ios - 更新 UILabel 看起来像是在浪费性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17117760/

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