2016-08-29 5 views
2

Я создал два контроллера вида, каждый из которых имеет кнопку, показывающую сегу к другому контроллеру представления.My viewcontroller не деинициализируется после show segue

var counter = 0 
class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     counter += 1 

     print("init viewc \(counter)") 
    } 

    deinit { 
     counter -= 1 
     print("deinit viewc \(counter)") 
    } 
} 

Похоже, Deinit никогда не вызывается каждый раз, когда я вернуться к ViewController, счетчик увеличивается:

init viewc 1 
init viewc 2 
init viewc 3 

И так далее ... Могу ли я что-то пропустил? Я думал, что show segue должен был освободить вызывающего абонента из памяти, поскольку он больше не нужен. Я создаю новые объекты ViewController каждый раз, когда я перехожу сейчас?

+0

Вы модально segueing между ВК Связанный в Раскадке? – Dravidian

+0

Нет, я выбрал «шоу», а не «настоящий модем» – vladakolic

+0

Пробовал ли вы представить свой VC, создав их? – Dravidian

ответ

1

Поскольку вы используете «show» segue, вы каждый раз создаете новый экземпляр диспетчера представлений, эффективно представляя верхний все более глубокий «стек» контроллеров вида.

Если вы хотите переключиться назад и вперед между отдельными экземплярами контроллеров зрения, то вы можете использовать контроллер представления контейнера, например, UITabBarController или использовать UINavigationController и манипулировать viewControllers свойством

+0

Мне удалось исправить проблему, перейдя на один контроллер представления, а затем снова открутив предыдущий (первый контроллер просмотра остается, но повторно используется, а второй удаляется). Контроллер навигации не держит их. Является ли это хорошим решением или может возникнуть проблема? То есть следует ли всегда включать их в контроллер навигации при этом? – vladakolic

+0

Нет, размотка segue в порядке. Если нет контроллера навигации, вы просто представляете второй контроллер представления по модулю поверх первого, а затем отбрасываете второй, когда вы расслабляетесь. – Paulw11

Смежные вопросы