На самом деле, dealloc вызывается , вы можете проверить это, добавив NSLog(@"dealloc called")
в dealloc
метод MyClass
.
Почему он все еще работает тогда?Когда объект освобождается, память не обнуляется, она просто помечается как свободная для использования системой.В результате код все еще может существовать по адресу указателя, а *class
является просто указателем на блок памяти. Вот отличный ответ SO, который объясняет его в деталях .
Важно отметить, что, если выполнение программы длится дольше, вызов [class printKbd]
скорее всего завершится сбоем.Вот почему важно присвоить nil
указателю, просто чтобы убедиться, что мы не получим доступ к неопределенной части памяти.