Лекция 8 CS193P Spring 2016 — Multithreading и Text Field (Многопоточность и текстовые поля)

Судя по названию, основными темами Лекции 8 являются:

  1. Многопоточность,
  2. Текстовые поля,

но очень значительная часть Лекции 8 посвящена усовершенствованию функциональных возможностей демонстрационного приложения Cassini по следующим направлениям :

  • использование множественного MVC Split View Controller в сочетании с парой   Navigation Controllers для обеспечения функционирования на iPhone и iPad
  • применение extension для расширения возможностей класса UIViewController
  • масштабирование изображения на Scroll View  c использованием методов делегата UIScrollViewDelegate
  • segue в коде
  • тонкости использования индикатора активности  (Activity Indicator) в виде маленького вращающегося «колесика» для визуализации занятости системы
  • повторное использование Detail в Split View
  • управление с помощью делегата UISplitViewController тем, что появляется, когда Split View показывается на экране впервые

В результате получился универсальный, подходящий на все случаи жизни, как в дальнейшем покажет практика, MVC для показа изображений по их URL —  ImageViewController. Огромный объем изображений NASA, задействованных в демонстрационного приложения Cassini , наглядно показывает необходимость использования многопоточности.

Многопоточность

Это одна из фундаментальных тем для программирования на мобильных устройствах. Для того, чтобы избежать блокировки взаимодействия пользователя с приложением и его «зависания», ресурсоемкие работы должны выполняться в других потоках, отличных от main queue (главной очереди).  Очередь main queue предназначена для взаимодействия с пользователем и должна всегда оставаться свободной. Только так можно создать «отзывчивый» пользовательский интерфейс (UI). Кроме того, она защищает UI от “разлаживания” в многопоточной среде, поэтому все действия с элементам UI должны выполняться в main queue в строгом порядке. Показано, что переключение между очередями удобно выполнять с помощью Grand Central Dispatch или функций, начинающихся с dispatch_. Это легко позволяет уловить намерения программиста. Рассматривается также объектно-ориентированное многопоточного программирования. Подробно профессор останавливается на использование параллельных (concurrent) очередей, поставляемых системой.

Современные методы многопоточного программирования требуют более изощренного воображения и более широкого взгляда на действия, происходящие в приложении. Дело в том, что в многопоточном программировании отдельные куски кода (чаще замыкания) завершаются в другом порядке, чем они запускаются на выполнение в разных потоках. Как с этим справиться показано на примере многопоточного приложения Cassini.

UITextField

В силу малости клавиатуры на iPhone вам захочется построить пользовательский интерфейс приложения без использования текстового поля. На iPad — ситуация лучше, но даже там пользователи скорее предпочтут что-то выбирать и кликать, чем прибегать к клавиатуре для набора текста.Так что UITextField — это не основной источник ввода информации на мобильных устройствах. Но есть случаи, когда без этого не обойтись.

Без делегирования текстовые поля не работают. Поэтому Полу Хэгерти представился еще один случай подробно поговорить о делегировании.

Использование текстового поля тесно связано с появлением и скрытием клавиатуры, а также с тем, что клавиатура может «заслонить» текстовое поле и не позволить вводить текст. Этому вопросу уделяется большое внимание. Рассматриваются различные способы решения этого вопроса, начиная от привлечения делегата UITextField и кончая использованием специальных  уведомлений UIKeyboard{Will,Did}{Show,Hide}Notifications

Лекции и слайды на английском языке представлены в iTunes название “8. Multithreading and Text Field”. Код демонстрационного примера «Cassini L8» для Swift 3.0  и Xcode 8 код находится на Github, а для Swift 3 .2  и Xcode 9 — также на Github.
Русскоязычный неавторизованный конспект лекции 8, хронометрированный через каждые 5 минут, и представленный в виде PDF-файла, который можно скачать и использовать offline, а также Google Doc доступны на платной основе.