В чем разница утечки памяти и зомби?
Я работаю над проектом на базе ARC. Я никогда не работал над проектом, основанным на не ARC. Недавно я
наткнулся на зомби в моем проекте с поддержкой ARC. Насколько я понял, там не будет памяти
утечки в ARC, поскольку объекты будут освобождены автоматически. Но я наткнулся на зомби
сообщение "сообщение передано на освобожденный экземпляр". Моя путаница - эквивалент утечки памяти
зомби. Если это так, то утечка памяти происходит и в ARC? Любая помощь?
Ответы
Ответ 1
"Зомби" в языке Objective-C противоположны утечкам. Утечка - это немного выделенная память, на которую у вас больше нет ссылок, поэтому вы не можете ее освободить. Зомби - это объект, который был освобожден, но ссылки на него все еще существуют, и сообщения по-прежнему отправляются на него (что может привести ко всем видам непредсказуемого поведения).
Ответ 2
Есть несколько возможностей, и трудно понять, что происходит, не видя кода. Ошибка "сообщение, переданное на освобожденный экземпляр" означает, что у вас есть указатель, указывающий на то, где был объект, но с тех пор был освобожден. Это может и до сих пор происходит с ARC. Это может произойти из-за того, что у вас есть код, отличный от ARC (или, возможно, материал Core Foundation), взаимодействующий с кодом ARC, и все происходит с ошибкой при раздаче. Это также может случиться, потому что, хотя ARC выбирает правильные моменты времени для выпуска объектов почти каждый раз, это не идеально (обычно есть способы обойти эти экземпляры).