Лекция 6 CS193P Winter 2017 — множественные MVCs, View Controller Lifecycle, and Memory.

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

  1. демонстрационный пример множественных MVCs, segues
  2. «жизненный цикл» View Controller.
  3. управление памятью (strong, weak, unowned )

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

Получает развитие демонстрационный пример FaceIt, в котором показывается все, что было теоретически изложено в Лекции 5. К уже разработанному на прошлой Лекции MVC «лицо» добавляется еще один очень простой MVC, позволяющий с помощью кнопок выбирать эмоции: “счастье”, “грусть”, «озабоченность». В демонстрационном примере эти два MVCs: MVC »эмоции» и MVC «лицо» комбинируются с помощью Split View c целью получения гибридного приложения, которое работает как  как на iPhones, так и на iPads. Но по умолчанию Split View на iPhone не работает. Нужна специальная настройка с помощью  Navigation Controller. Показаны все «подводные камни» такой настройки, а также подготовки с помощью метода prepareForSegue в условиях неустановленных outlets

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

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

Очень много информации о методах viewWillLayoutSubviews и viewDidLayoutSubviews и их связи с механизмом Autolayout. Они вызываются при изменении геометрии устройства и не только. Именно здесь следует делать геометрически- зависимые вычисления.

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

Третья часть Лекции 6 посвящена автоматической системе управления памятью путем подсчета ссылок” (automatic reference counting) ARC.
При нормальной работе мы вообще не думаем об ARC. Но есть ситуации, когда бывает необходимо повлиять на ее работу. Это можно сделать с помощью 3-х ключевых слов в Swift: strong, weak и unowned. Профессор подробно рассказывает, что означают эти три ключевых слова и когда они применяются. В результате он приходит к выводу, что в Swift вы можете вообще с ними не встретиться, но в особых случаях возможно использование weak, использование strong вам никогда не понадобиться, потому что это значение по умолчанию, а unowned — крайне редко употребляется.

Приличную часть Лекции 6 занимает «захват» замыканием окружающего контекста, а также условия возникновения «циклических ссылок памяти» на конкретном примере сначале на слайдах, а затем и в демонстрационном примере. Обсуждается, что лучше использовать для разрыва «циклических ссылок памяти»: weak или unowned, и какие последствия того и другого.

Из-за нехватки времени профессору не удалось показать блестящий демонстрационный пример, который наглядно демонстрирует возникновение «циклических ссылок памяти» и способы их «разрыва» на примере Калькулятора. Он  приводил его в прошлом курсе по iOS 9 и произвел на меня очень большое впечатление. Я рискнула повторить его для iOS 10 как дополнение к Лекции 6. Если вы его посмотрите, то вы навсегда запомните, что такое «циклическая ссылка памяти» и как ее «разорвать».

Лекции и слайды на английском языке представлены в iTunes название “6. Multiple MVCs, View Controller Lifecycle, and Memory.”. Код демонстрационного примера «L6 FaceIt» доступен как на  iTunes название “Lecture 6 Demo Code: FaceIt.«, так и на Github.

Дополнительный демонстрационный пример с «циклическими ссылками памяти» «Calculator End L6″ также доступен на  Github.

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