UILabel 在运行时更改,管理用于更改字符串的内存

Posted

技术标签:

【中文标题】UILabel 在运行时更改,管理用于更改字符串的内存【英文标题】:UILabel changing during runtime, managing memory for changing strings 【发布时间】:2010-11-10 01:17:53 【问题描述】:

我有几个标签在游戏中用作玩家的 HUD。我经常更新这些标签,以便玩家获得最新信息。问题是我一直在使用

uiLabel.text = [NSString stringWithFormat:@"%3.0f", value];

传递标签应具有的新值。但是,我注意到这里有一些软内存泄漏。当我每秒多次执行此更新并创建一个设置为自动释放的字符串时,我最终占用的内存超出了我的需要。并保持它,因为视图不会消失。

我也尝试过显式分配和释放字符串,例如:

NSString* value = [[NSString alloc] initWithFormat: @"%3.0f", value];
uiLabel.text = value;
[value release];

但是,我发现这似乎会导致同样的事情,但速度更快,虽然我不知道为什么。在这种情况下,我会认为根本不应该有等待释放的字符串,因为我明确地忽略了它们。

谁能看到我在这里所做的我显然没有看到的事情?有没有更好/更首选的方法来处理这个问题?一些粗略的搜索对我来说并没有太大的意义。

【问题讨论】:

【参考方案1】:

你没有做任何不寻常的事情。即使有:

uiLabel.text = [NSString stringWithFormat:@"%3.0f", value];

每当您的代码将控制权返回给运行循环时,自动释放池就会耗尽(至少与您看到 UI 更新的频率一样)。如果您发现内存分配不断增加,您应该寻找其他地方。

【讨论】:

我注释掉了这些调用(整个 HUD 刷新,目前仅构成其中三个调用)并且字符串停止增加。 -- 运行应用程序约 5 分钟会让我受益匪浅。如果在***上可以的话,我很高兴附上屏幕截图(我对发布很陌生)。如果有什么我可以提供帮助的信息,请告诉我。 我进行了更多的分析测试,我相信你的回答应该是有道理的,但这绝对不是我所看到的。

以上是关于UILabel 在运行时更改,管理用于更改字符串的内存的主要内容,如果未能解决你的问题,请参考以下文章

根据 UIButton 控件事件更改 UILabel

使用 Xcode6 丢失对 UILabel 和 UIImage 框架的编程更改

动态更改 UILabel 宽度不适用于自动布局

更改暗模式时未更新 HTML 字符串中的颜色

在 Interface Builder 中更改 UILabel 上的字符间距

使用时间和动画从字符串数组中更改 UILabel/UIButton 文本