Лекция 6 CS193P Spring 2016 — множественные MVCs, Segues, FaceIt и View Controller

В Лекции 6 рассматриваются две главные темы :

  1. множественные MVCs, segues
  2.  «жизненный цикл» View Controller.

Лекция 6 продолжает тему множественных MVCs, начатую в конце лекции 5, где было показано как можно комбинировать MVCs с помощью Tab Bar Controllers, Split View Controllers и Navigation Controllers и как подсоединять их на storyboard. Но одно дело подсоединить их на storyboard, и совсем другое, когда  будет работать пользователь, нажимая на кнопки и и другие элементы UI, перемещаясь между различными MVCs.

Связи между MVC осуществляются segues. Они всегда создают новый экземпляр вызываемого MVC и нуждаются в инициализации этого MVC, например, с использованием метода prepareForSegue.

Для того, чтобы успешно использовать segues, надо понимать, что в мире множественных MVCs  каждый отдельный MVC является “объектно-ориентированым” в том смысле, что он «живет» в своем собственный мире. У него есть некоторый public API и мы можем взаимодействовать с ним, устанавливая определенные вещи в этом public API, а дальше он делает то, что должен делать и нам не отвечает.

Далее в лекции получает развитие демонстрационный пример FaceIt, в котором очень большое внимание уделено подготовке MVC при «переезде» (segue) и использовании метода prepareForSegue. Показаны все «подводные камни» такой подготовки, проходящей в условиях неустановленных outlets того MVC,  на который мы «переезжаем», и что с этим делать. 

Другая тема — это  “жизненный цикл” View Controller, то есть как View Controller рождается, живет, делает много интересных дел и затем умирает. Профессор подробно рассказывает нам о всех этапах жизни View Controller и о том, какие сообщения посылает ему система на протяжении его «жизненного цикла».  Он начинает с момента создания View Controller, затем следует подготовка View Controller для того случая, когда к этому View Controller кто-то “переезжает”  (segue). Следующий этап — установка ваших outlets, затем ваш View Controller появляется (appear) на экране и может исчезнуть, и может опять появиться, и опять исчезнуть.  Затем его геометрия может быть изменена, например, при автоматическом вращении (autorotation) прибора.  В некоторых неочевидных случаях может иметь место ситуация нехватки памяти на вашем устройстве, и система может вовлечь вас в решение этой проблемы.

Он не просто перечисляет такие методы «жизненного цикла» View Controller, как viewDidLoadviewWillAppearviewWillTransitionToSize и другие, но также очень подробно рассказывает о том, в каких ситуациях их нужно применять, а в каких воздержаться от их использования.

Профессор проводит короткую, но очень информативную демонстрацию, на которой показано, как «в живую» работают все методы «жизненного цикла» View Controller.

Лекции и слайды на английском языке представлены в iTunes название “6. Multiple MVCs, Segues, FaceIt, and View Controller”. Код демонстрационного примера «FaceIt L6» для Swift 3.0  и Xcode 8 код находится на Github, а для Swift 3 .2  и Xcode 9 — также на Github.

Русскоязычный неавторизованный конспект лекции 6, хронометрированный через каждые 5 минут, и представленный в виде PDF-файла, который можно скачать и использовать offline, а также Google Doc доступны на платной основе.

Лекция 6 CS193P Spring 2016 — множественные MVCs, Segues, FaceIt и View Controller: 4 комментария

  1. Спасибо за переводы ! Самое хорошее изложение материала что видел! Сейчас дочитал вторую лекцию и все понятно) Надеюсь переведете дальше когда дойду до шестой =) Спасибо за работу!!!

  2. Немного не понимаю,что имеет в виду профессор говоря про ViewController LifeCycle, а именно что viewDidLoad() вызывается один раз, а далее если controller приходит и уходит с экрана только методы Appear/Dissapear — ведь когда Controller убирается со стака он полностью пропадает и если снова перейти на данное MVC , то вызывается viewDidLoad() — слова профессора работают только если данное MVC остаётся в стаkе NavigationController’a — Походу в вопросе и есть ответ, но раз написал опубликую ради памятки )))

    • Вы немного путаете понятие «жизненного цикла» View Controller и «жизнь» приложения. В приложении может быть создано много экземпляров одного и то же MVC, но под «жизненным циклом» View Controller понимается «жизнь» одного экземпляра MVC, с момента, когда он создается, то есть размещается в «куче», и до момента, когда он удаляется из «кучи», то есть «умирает». Так вот, на протяжении этого «жизненного цикла» экземпляра MVC viewDidLoad вызывается лишь однажды — при создании.
      Когда вы будете делать Задание 4 вы все поймете про «жизненный цикл» View Controller, так как там вам придется создавать множество экземпляров одного и того же MVC, причем все они будут «сидеть» в стэке, а вам придется различать, кто из них корневой.

  3. segue preparation happens , к примеру если кто то нажал на кнопку на одном MVC, a нажатие ведёт к созданию другого MVC, то для нового MVC весь процесс проделывается сначала instantiated -> awakeFromNib -> segue preparation happens -> outlets get set … я верно понимаю? В целом не до конца почему segue preparation happens находится на этом месте в цепочке процессов. Можете пояснить пожалуйста, был бы очень признателен

Обсуждение закрыто.