Если вы явно освобождаете каждый контроллер представления, который больше не нужен, вы не вызовете утечек памяти.Обычно, когда вы представляете контроллер представления, объект, который выполняет представление, сохраняет контроллер для вас, поэтому вы можете освободить его, если вам больше не нужен доступ к нему.Но если вы используете UINavigationController и запускаете новый контроллер представления, вам следует реализовать метод viewDidUnload.Это прямо из документации Apple:
После загрузки в память представление контроллера представления остается в памяти до тех пор, пока не возникнет состояние нехватки памяти или не освободится сам контроллер представления.В случае нехватки памяти стандартное поведение UIViewController заключается в освобождении объекта представления, хранящегося в свойстве представления, если это представление в настоящее время не используется.Однако, если ваш пользовательский класс контроллера представления хранит выходы или указатели на какие-либо представления в иерархии представлений, вы также должны освободить эти ссылки при выпуске объекта представления верхнего уровня.Невыполнение этого требования препятствует немедленному удалению этих объектов из памяти и может привести к утечкам памяти позже, если впоследствии вы перезапишите на них какие-либо указатели.всегда следует очищать любые ссылки для просмотра объектов:
Метод dealloc Метод viewDidUnload Если вы используете объявленное свойство для хранения ссылки на ваше представление, и это свойство использует сохранение семантики, присваиваядля этого достаточно нулевого значения.Свойства являются безусловно предпочтительным способом управления объектами просмотра из-за их удобства.Если вы не используете свойства, вы должны отправить сообщение о выпуске любому представлению, которое вы явно сохранили, прежде чем устанавливать соответствующее значение указателя равным nil