所以我的记忆有点问题。似乎我没有正确地释放或释放对象,因为我在游戏中得到了这种微妙的内存积累。
我像这样初始化所有的对象:
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的漏洞。
发布于 2011-10-19 04:10:06
您应该使用release而不是dealloc。每个对alloc的调用都应该与一个release或autorelease相匹配;在您的示例中,使用release,因为您希望控制它何时被释放。
https://stackoverflow.com/questions/7813029
复制相似问题