我几乎是 Objective-c 的新手,当我开始编程时,我并没有真正掌握如何正确释放对象。所以,我的项目是对 Objective-c 世界的介绍,我完全省略了它。然而,现在,我认为这个项目的演变在于,只留下它太可惜了。所以,除了所有的alloc
s、copy
s 和new
s,我在理解为什么我的项目仍然泄漏这么多内存方面存在严重问题。
我使用了 Instruments 中的泄漏工具(看截图),它向我展示了泄漏的整个对象数组。我现在的问题是:这是值得担心的事情,还是这些物体在某个时候被释放?如果不是,我如何找到泄漏的原因?我知道如果我按 cmd + e 它会显示扩展的详细信息窗口,但是我应该查看哪些方法?我假设这是我自己的方法我必须打开,但大多数时候它说,即层的分配和初始化会导致问题。
也就是说,我想知道如何有效地检测泄漏。当我查看leaks
工具栏时,在我的游戏层 ( HelloWorldLayer
) 初始化时会出现一条红色的红线。然而,这只是在它的初始化......所以,我需要担心这个吗?
这是屏幕截图:文件链接(为了放大)-> http://i.stack.imgur.com/QXgc3.jpg
编辑:
我解决了几个泄漏,但现在我有另一个我不太明白的泄漏:
for (int i = 1; i<=18; i++) {
NSMutableDictionary *statsCopy = (NSMutableDictionary *)CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (CFDictionaryRef)stats, kCFPropertyListMutableContainers);
NSNumber *setDone = [num copy];
[levels setObject:statsCopy forKey:[NSString stringWithFormat:@"level%d", i]];
[levels setObject:setDone forKey:@"setDone"];
[statsCopy release];
[setDone release];
}
他碰巧检测到深层副本的泄漏,即使我释放它......