Memory Leak和Zombie有什么区别?

时间:2012-10-01 04:46:48

标签: objective-c xcode memory-leaks automatic-ref-counting

我正在开发一个基于ARC的项目。我从未参与过基于Non ARC的项目。最近我

在我启用ARC的项目中遇到了一个僵尸。据我所知,那里不会有记忆

在ARC中泄漏,因为对象将自动解除分配。但我遇到了一个僵尸

说“消息传递给解除分配的实例”。我的困惑是内存泄漏等价物

一个僵尸。如果是这种情况,那么内存泄漏也会发生在ARC中吗?有什么帮助吗?

2 个答案:

答案 0 :(得分:40)

用Objective-C说法中的“僵尸”与泄漏相反。泄漏是一些分配的内存,你不再有任何引用,所以你不能释放它。僵尸是已经被解除分配的对象,但是对它的引用仍然存在,并且仍然向它发送消息(这可能导致各种不可预测的行为)。

答案 1 :(得分:1)

有几种可能性,如果不看代码,很难知道发生了什么。 “传递给解除分配的实例的消息”错误意味着您有一个指向对象所在位置的指针,但此后已被解除分配。 ARC可以并且仍然会发生这种情况。之所以会发生这种情况,是因为你有一些非ARC代码(或者可能是Core Foundation的东西)与ARC代码进行交互,并且在交接过程中出现问题。它也可能发生,因为虽然ARC几乎每次都选择正确的时间点来释放对象,但它并不完美(通常有办法解决这些实例)。