保留计数为0的对象不会被释放。

6
为什么我的对象在下面的泄漏跟踪中没有被释放?跟踪显示它的引用计数为0,那么为什么它没有被释放呢?这个对象是一个直接从NSObject派生的自定义类。我所做的就是对它进行分配、初始化,并从它那里复制一些字符串/数字,然后发送“release”,但它仍然被认为是泄漏的并且没有被解除分配。在工具中的分配情况下,我看到它处于“living”状态,因此它实际上没有被解除分配。我创建了成百上千个这样的对象,所以我不能让它们继续存在。我该如何使这个对象被解除分配?为什么它首先没有被解除分配?

2
只是一点观察/旁注:如果您的对象确实像您所描述的那样临时,而且您会像便宜的包装纸一样使用数百个这些对象,那么不断分配/释放它们可能会变得昂贵。也许可以使用不同的设计:享元设计模式、单例设计模式、对象池等。 - user1040049
@QwertyBob:这个对象的基本功能是将文件解析成许多字符串/数组/数字。由于它们很多,我不能直接返回它们,所以我认为使用“initWithFilename:”在对象上填充属性,然后稍后复制这些属性是一个好主意。你有更好的建议吗? - Daniel
@QwertyBob:我面临的问题并不是时间,因为它并不明显,而且每单位时间对象数量也不会增加(有点周期性),所以我唯一的问题就是它们被泄露了。 - Daniel
1
@Dani,QuickLevelLoader在-dealloc中有做任何奇怪的事情吗?比如忘记调用[super dealloc]? - Firoze Lafeer
1
@FirozeLafeer:就是这样!在自定义的-dealloc方法中忘记了[super dealloc]。你能把它发布为答案吗? - Daniel
@Dani:请允许我为dealloc建议一个包括super消息的自定义片段。这个片段永远不会被遗忘! - jscs
1个回答

9

看起来你忘记在-dealloc方法中调用[super dealloc]了。我们都犯过这个错误 :)

因此,对象会按预期收到dealloc调用,但实际上并没有被释放。


1
谢谢!谢谢!谢谢!在我快要抓狂的时候,我终于在Stack Overflow上找到了这个问题和正确的答案!太好了! - ToddH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接