【发布时间】:2011-12-10 09:54:16
【问题描述】:
所以我的内存有问题。似乎我没有正确释放或释放对象,因为我在游戏中得到了这种微妙的内存积累。
我像这样初始化所有对象:
self = [super init];
if (self != nil) {
//inititalize object
}
我在 dealloc 方法中释放所有对象,如下所示:
[object release], object = nil;
现在我觉得我应该提到我的游戏在视图上运行。我的主视图将子视图加载到一个名为“currentView”的变量中。我像这样在视图之间切换。
if (currentView != nil) {
[currentView dealloc];
}
currentView = [[newView alloc] initWithVariables:vars];
我想知道问题是我的对象初始化和释放还是视图问题。我还想知道我可以使用哪些策略来追踪仪器中未出现的任何泄漏。
我需要尽快获得此信息,如果您能提供帮助,我们将不胜感激。谢谢。
编辑:当我通过仪器运行它时,它会显示我的应用程序使用的内存。它有一个奇怪的模式。当它加载第一个视图时,它从大约开始。使用了 17mb。然后我切换到第二个视图,它上升到 22mb。现在,如果我回到第一个视图,它不会再次下降到 17mb,而是下降到大约 20mb。现在,当我继续在两者之间切换时,它会在 22mb 和 20mb 之间切换,并且几乎保持不变。这怎么解释?
EDIT2:上述编辑中解释的模式在整个游戏中是一致的。由于这种一致性,我注意到我的游戏中每级泄漏 70kb。显然,当我的游戏保持在 100mb 以下时,这不会造成任何问题,因此除非他们长时间玩我的游戏,否则这应该不是问题。
尽管如此,我仍然想知道如何追踪 70kb 的泄漏。
【问题讨论】:
-
系统缓存了很多东西,所以当你从视图返回时,东西不一定会“下降”。并且永远不要(在正常情况下)做
dealloc。如果release不起作用,那是因为您在某处隐藏了retain。
标签: ios memory-management ios4 dealloc alloc