我正在做一个基于 ARC 的项目。我从未从事过基于非 ARC 的项目。最近我
在我启用 ARC 的项目中遇到了一个僵尸。据我所知,不会有记忆
ARC 中的泄漏,因为对象将被自动释放。但我遇到了一个僵尸
说“消息传递给解除分配的实例”。我的困惑是内存泄漏等价物
给僵尸。如果是这种情况,那么 ARC 中也会发生内存泄漏吗?有什么帮助吗?
我正在做一个基于 ARC 的项目。我从未从事过基于非 ARC 的项目。最近我
在我启用 ARC 的项目中遇到了一个僵尸。据我所知,不会有记忆
ARC 中的泄漏,因为对象将被自动释放。但我遇到了一个僵尸
说“消息传递给解除分配的实例”。我的困惑是内存泄漏等价物
给僵尸。如果是这种情况,那么 ARC 中也会发生内存泄漏吗?有什么帮助吗?
Objective-C 用语中的“僵尸”与泄漏相反。泄漏是您不再有任何引用的已分配内存,因此您无法释放它。僵尸是一个已被释放的对象,但对它的引用仍然存在,并且消息仍在发送给它(这可能导致各种不可预知的行为)。
有几种可能性,如果不看代码就很难知道发生了什么。“传递给已释放实例的消息”错误意味着您有一个指向对象所在位置的指针,但此后已被释放。这可以并且仍然会发生在 ARC 中。这可能是因为你有一些非 ARC 代码(或者可能是 Core Foundation 的东西)与 ARC 代码交互,而事情在交接时出现了问题。这也可能发生,因为虽然 ARC 几乎每次都选择正确的时间点来释放对象,但它并不完美(通常有一些方法可以解决这些实例)。