Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 泄漏对象而不调用alloc、new、copy?_Objective C_Ipad_Memory Leaks_Cocos2d Iphone - Fatal编程技术网

Objective c 泄漏对象而不调用alloc、new、copy?

Objective c 泄漏对象而不调用alloc、new、copy?,objective-c,ipad,memory-leaks,cocos2d-iphone,Objective C,Ipad,Memory Leaks,Cocos2d Iphone,我几乎是objective-c的新手,在我开始编程时,我并没有真正掌握如何正确地释放对象。因此,我的项目是对Objective-c世界的介绍,我完全忽略了它。然而,现在,我认为这个项目的发展是因为它太可惜了,就这样离开了。因此,抛开所有的allocs、copys和news,我很难理解为什么我的项目仍在泄漏这么多内存 我在仪器中使用了泄漏工具(看屏幕截图),它向我展示了泄漏的整个对象阵列。我现在的问题是:这是一个值得担心的问题,还是这些对象在某个时候被释放了?如果没有,我如何找到泄漏的原因?我知道

我几乎是objective-c的新手,在我开始编程时,我并没有真正掌握如何正确地释放对象。因此,我的项目是对Objective-c世界的介绍,我完全忽略了它。然而,现在,我认为这个项目的发展是因为它太可惜了,就这样离开了。因此,抛开所有的
alloc
s、
copy
s和
new
s,我很难理解为什么我的项目仍在泄漏这么多内存

我在仪器中使用了泄漏工具(看屏幕截图),它向我展示了泄漏的整个对象阵列。我现在的问题是:这是一个值得担心的问题,还是这些对象在某个时候被释放了?如果没有,我如何找到泄漏的原因?我知道如果我按下cmd+e,它会显示扩展的详细信息窗口,但是我应该查看哪些方法?我假设这是我自己的方法,我必须打开,但大多数时候,它说,即分配和初始化一个层导致的问题

也就是说,我想知道如何有效地检测泄漏。当我查看仪器的
leaks
栏时,在我的游戏层(
HelloWorldLayer
)初始化时,会出现一条biiiig红线。然而,这只是在它的初始化。。。那么,我需要为此担心吗

以下是截图: 链接到文件(以便放大)->

编辑:
我解决了几个漏洞,但现在我有另一个我不太明白的漏洞:

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];
        }

for(int i=1;i屏幕截图显示在
-[Categories init]
中分配了一个从未发布过的词典。实际上,有很多(2765)这样的词典

该方法似乎正在调用
-[NSDictionary newWithContentsOf:immutable:]
。由于Cocoa内部的优化,这里的堆栈跟踪可能有点误导。这不是一个公共方法。它可能由另一个
NSDictionary
方法调用,该方法的尾部调用优化为跳转,而不是子例程调用

假设有可用的调试信息,如果双击堆栈跟踪中的那一行,仪器应该向您显示
-[Categories init]
中的精确行


知道它被分配到哪里并不是全部。类别可以正确地管理对象的所有权。但是,其他一些类可能会访问它,并过度保留或不足释放它。因此,您可能必须跟踪其中一个对象的保留和释放的整个历史,以查看哪个类拥有所有权nd忽略了释放它。注意,这必须对泄漏的字典之一执行,而不是字典内部使用的malloc块之一。在表中向下两行查找一些有希望的候选对象。切换打开该行以查看特定对象。双击一个或单击其地址旁边的圆圈箭头按钮(我忘了是哪个)查看保留和释放的历史记录。

是的,泄漏很严重,可能会导致内存不足崩溃。最好释放所有不再使用的内存。能否具体展示一些代码,说明您在何处定义NSDictionary以及如何向其添加对象。问题是,我不知道罪魁祸首在何处。我到底应该在何处查找如果您不知道哪个对象正在泄漏..可以使用
[myObject retainCount]查看
。当场景开始时,不应该有任何泄漏,只有分配应该尖峰。此外……查看堆栈树以了解分配是如何调用的。切换到ARC可能比尝试修复内存泄漏更容易。在任何情况下,如果要忽略保留和释放,请使用ARC。是否可以使用cocos2d???t谢谢你的回答…请看我的问题,我补充了另一个我在深度复制中遇到的问题…如果你能帮助我,我将非常感激:-)您应该为一个单独的问题开始一个新问题。无论如何,如上所述,最初分配对象的代码中不一定会发生泄漏。其他一些代码可能会过度保留或不足释放对象。此外,您是否消除了泄漏
级别
对象的可能性?