我在比赛中使用了几个标签作为玩家的HUD。我经常更新这些标签,以便播放器拥有最新信息。问题是我一直在使用
uiLabel.text = [NSString stringWithFormat:@"%3.0f", value];
传递标签应具有的新值。但是,我注意到,这里有一些软内存泄漏。因为我每秒多次执行此更新,这会创建一个设置为autorelease的字符串,我最终会占用比我需要更多的内存。保持它,因为观点不会消失。
我还试图明确地分配和释放字符串,例如:
NSString* value = [[NSString alloc] initWithFormat: @"%3.0f", value];
uiLabel.text = value;
[value release];
然而,我发现这似乎导致了同样的事情,但更快,虽然我不知道为什么。在这种情况下,我原本以为应该永远不会有等待被释放的字符串,因为我是如此明确地解雇它们。
有谁能看到我在这里做的事情,我显然没有看到?是否有更好/更优选的方法来处理这个问题?一些粗略的搜索并没有给我带来太大的影响。
答案 0 :(得分:2)
你没有做任何与众不同的事情。即使有:
uiLabel.text = [NSString stringWithFormat:@"%3.0f", value];
每次代码将控制权返回到运行循环时,自动释放池就会耗尽(至少与您看到UI更新时一样频繁)。如果你看到内存分配越来越多,你应该去别处看看。