В чем разница утечки памяти и зомби?

Я работаю над проектом на базе ARC. Я никогда не работал над проектом, основанным на не ARC. Недавно я

наткнулся на зомби в моем проекте с поддержкой ARC. Насколько я понял, там не будет памяти

утечки в ARC, поскольку объекты будут освобождены автоматически. Но я наткнулся на зомби

сообщение "сообщение передано на освобожденный экземпляр". Моя путаница - эквивалент утечки памяти

зомби. Если это так, то утечка памяти происходит и в ARC? Любая помощь?

Ответы

Ответ 1

"Зомби" в языке Objective-C противоположны утечкам. Утечка - это немного выделенная память, на которую у вас больше нет ссылок, поэтому вы не можете ее освободить. Зомби - это объект, который был освобожден, но ссылки на него все еще существуют, и сообщения по-прежнему отправляются на него (что может привести ко всем видам непредсказуемого поведения).

Ответ 2

Есть несколько возможностей, и трудно понять, что происходит, не видя кода. Ошибка "сообщение, переданное на освобожденный экземпляр" означает, что у вас есть указатель, указывающий на то, где был объект, но с тех пор был освобожден. Это может и до сих пор происходит с ARC. Это может произойти из-за того, что у вас есть код, отличный от ARC (или, возможно, материал Core Foundation), взаимодействующий с кодом ARC, и все происходит с ошибкой при раздаче. Это также может случиться, потому что, хотя ARC выбирает правильные моменты времени для выпуска объектов почти каждый раз, это не идеально (обычно есть способы обойти эти экземпляры).