Насколько я понимаю, функция Zombies должна рассматриваться как взаимоисключающая утечка и распределение объектов в Инструментах.
Фактически, когда вы включаете зомби (директива Instruments или NSZombies), что происходитзаключается в том, что «нормальный» цикл сохранения объектов обманывается, так что вы можете обнаружить попытку использования объекта, который уже был освобожден.В некотором смысле, я не знаю подробностей об этом, но это похоже на то, если счет сохранения увеличивается на единицу, и вы получаете ошибку о попытке использования уже освобожденного экземпляра, когда счет сохранения равен 1Действительно, если счет сохранения мог бы обнуляться, объект был бы освобожден, и в большинстве случаев было бы невозможно обнаружить попытку повторного использования, так как это может произойти в течение длительного времени после освобождения, и этот кусок памяти мог бытьперераспределить на какой-то другой объект.Таким образом, искусственный прирост количества удерживающих устройств позволил бы объекту выжить после его «возможного» освобождения;когда счетчик сохранения становится равным 1, в объекте устанавливается флаг, чтобы среда выполнения знала, что пытается отправить сообщение освобожденному объекту «будет», и вы получаете полное сообщение об ошибке.
Это всего лишь моя ментальная модель, но она позволяет мне объяснить, почему выделение памяти намного выше, когда зомби включены (то есть, потому что объекты не освобождаются, как это было бы в обычном случае).