раскрутить Segue и Dealloc

Я пытаюсь понять, как раскрутить процесс перехода.

Вызывается ли метод Dealloc исходного контроллера представления, когда выполняется раскрутка перехода, как UINavigationController процесс кнопки "Назад"?

Если нет, означает ли это утечку памяти?


person Dogan    schedule 11.08.2015    source источник
comment
Вы можете быстро проверить это, реализуя метод dealloc и посмотреть, вызывается ли он. Но да, когда вы раскручиваете, контроллер представления, с которого вы раскручиваетесь, должен быть освобожден (при условии, что у вас нет сильного цикла ссылок, который препятствует этому).   -  person Rob    schedule 12.08.2015
comment
Я сделал, прежде чем опубликовать свой вопрос. но после вашего комментария я попробовал еще раз, и вызывается метод Dealloc. Я не знаю, почему. не важно :-) спасибо   -  person Dogan    schedule 12.08.2015


Ответы (1)


Не напрямую. Он будет вызываться, когда будут удалены все сильные ссылки на контроллер представления. После вызова unwind контроллер uinavigation ДОЛЖЕН быть завершен с контроллером представления, если вы не сохранили его сильно в каком-то навигационном контроллере или чем-то еще.

Это не всегда происходит сразу, подумайте и о пулах авторелиза. Убедитесь, что у вас также нет сильных точек делегирования. (большой виновник)

Полезный совет: искать где-либо в коде контроллера представления используется «я», и определить, является ли он сильным, если это так, вы должны обнулить его в раскрутке, иначе не будет вызываться Dealloc - вам не нужно беспокоиться о С ARC слишком много освобождается, если только у вас нет объектов, которыми нужно управлять, или слабых ссылок без автоматических нулевых значений.

person Mitchell Currie    schedule 12.08.2015
comment
Хороший ответ, особенно в отношении сохранения цикла. Не забудьте обнулить ссылку на контроллер назначения в методе раскрутки. - person BootMaker; 13.08.2016