Как пройти собеседование и получить первую работу на Swift

Anton Loginov
Anton Loginov-- em ООО "Домашние деньги"​
Как пройти собеседование и
получить первую работу
как trainee-to-junior developer
И что для этого нужно знать:
Что нужно знать?
• UIKit
• App life-cycle
• ViewController life-cycle
• GCD
• Patterns
• OOP • Architecture
• MVC
• RESTfull API
• Delegate
• Protocols
• ARC
UIKit
UIKit - это библиотека, обеспечивающая
ключевую инфрастуктуру, необходимую для
построения iOS-приложений. UIKit содержит
огромное количество классов, позволяющих
строить визуальные элементы, анимировать их,
обрабатывать физические законы, управлять
механизмами печать, обработки текста и
многое другое. Это важнейшая и совершенно
незаменимая библиотека методов, которую вы
будете использовать при разработке каждого
приложения
App life-cicle
• didFinishLaunchingWithOptions
(1)
• applicationWillResignActive (3)
• ApplicationDidBecomeActive (2)
• applicationWillEnterForeground
(4)
• applicationWillTerminate
(Приложение успешно запустилось)
(Переключение на другое приложение или
нажатие кнопки Home)
Обычно на этом этапе приостанавливаются какие-то
задачи или ставится на паузу игра. В этом месте мы
ставим «на паузу» пользовательский интерфейс.
(Приложение перешло в состояние Active)
Следует перезапустить все задачи, которые были
поставлены на паузу в предыдущем состоянии, или
которые были не запущены вовсе. Если приложение
пришло из Background опционально обновить интерфейс.
App life-cycle
• applicationWillEnterForeground
(4)
• applicationWillTerminate
• applicationDidEnterBackground
(3)
(Переход в состояние Background)
Тут нужно сохранять пользовательские данные, или
сохранять состояние приложения, чтобы оно запустилось с
места остановки.
(Переход из Background в состояние Foreground)
В этом состоянии можно сменить все изменения,
сделанные в состоянии Background.
(Пользователь закрывает приложение)
View Controller life-cycle
OOP
• Абстракция данных
• Инкапсуляция
• Полиморфизм подтипов
Абстрагирование означает выделение значимой информации и исключение из
рассмотрения незначимой. В ООП рассматривают лишь абстракцию данных (нередко
называя ее просто «абстракцией»), подразумевая набор значимых характеристик объекта,
доступный остальной программе.
Свойство системы, позволяющие объединить данные и методы, работающие с ними, в
классе. Одни языки (C++, Java, Ruby) отождествляют инкапсуляцию с сокрытием, другие
различают эти понятия.
Свойство системы, позволяющие использовать объекты с одинаковым интерфейсом без
информации о типе и внутренней структуре объекта.
OOP
• Класс
• Объект
Универсальный, комплексный тип данных, состоящий из тематически единого набора
«полей» (переменных более элементарных типов) и «методов» (функций для работы с
этими полями), то есть он является моделью информационной сущности с внутренним и
внешним интерфейсами для оперирования своим содержимым. В частности, в классах
широко используются специальные блоки из одного или чаще двух спаренных методов,
отвечающих за элементарные операции с определенным полем (интерфейс присваивания
и считывания значения). При копировании соответствующей переменной через
присваивание, копируется только интерфейс, но не сами данные, то есть класс -
ссылочный тип данных. Переменная-объект, относящаяся к заданному классом типу
называется экземпляром класса. Обычно классы разрабатывают таким образом, чтобы
обеспечить отвечающие природе объекта и решаемой задаче целостность данных
объекта, а также удобный и простой интерфейс. В свою очередь, целостность предметной
области объектов, а также удобный и простой интерфейс. В свою очередь, целостность
предметной области объектов и их интерфейсов, а также удобство их проектирования,
обеспечивается наследованием.
Сущность в адресном пространстве вычислительной системы, появляющаяся при
создании экземпляра класса (например, после запуска результатов компиляции и
связывания исходного кода на выполнение)
MVC
жения, пользовательского интерфейса и управляющей логики на три отдельных компонента
RESTful API
REST (RESTful) - это общие принципы организации взаимодействия приложения/сайта с
сервером посредством протокола HTTP. Особенность REST в том, что сервер не
запоминает состояние пользователя между запросами - в каждом запросе передаётся
информация, идентифицирующая пользователя (например, token, полученный через
OAuth-авторизацию) и все параметры, необходимые для выполнения операции.
Всё взаимодействие с сервером сводится к 4 операциям (4 - это необходимый и
достаточный минимум, в конкретной реализации типов операций может быть больше):
1. получение данных с сервера (обычно в формате JSON, или XML)
2. добавление новых данных на сервер
3. модификация существующих данных на сервере
4. удаление данных на сервере
Операция получения данных не может приводить к изменению состояния сервера.
Для каждого типа операции используется свой метод HTTP-запроса:
1. получение - GET
2. добавление - POST
3. модификация - PUT
4. удаление - DELETE
Delegate
Делегирование - это шаблон, который позволяет классу или
структуре передавать (или делегировать) некоторую
ответственность экземпляру другого типа. Этот шаблон реализуется
определением протокола, который инкапсулирует делегируемые
полномочия, таким образом, что соответствующий протоколу тип
(делегат) гарантировано получит функциональность, которая была
ему делегирована. Делегирование может быть использовано для
ответа на конкретное действие или для получения данных из
внешнего источника без необходимости знания типа источника.
Protocols
Протокол определяет образец методов, свойств или другие требования, которые
соответствуют определенному конкретному заданию или какой-то функциональности.
Протокол фактически не предоставляет реализацию для любого из этих требований,
он только описывает как реализация должна выглядеть. Протокол может быть
принят классом, структурой или перечислением для обеспечения фактической
реализации этих требований. Любой тип, который удовлетворяет требованиям
протокола, имеет указание соответствовать этому протоколу.
В дополнение к определенным требованиям, которые должны быть реализованы
подписанными под протокол типами, вы можете расширить протокол, чтобы
реализовать некоторые из этих требований или для того, чтобы реализовать
дополнительную функциональность, которую смогут использовать подписанные под
протокол типы.
Patterns
Шаблон проектирования или паттерн (англ. design pattern) в
разработке программного обеспечения — повторимая архитектурная
конструкция, представляющая собой решение проблемы
проектирования в рамках некоторого часто возникающего контекста.
Singleton
Architecture
Разве это не похоже на «яблочный» MVC? На самом деле — очень, а
имя ему — MVP (вариант с пассивной View). Но означает ли это, что
MVC от Apple на самом деле является MVP? Нет, не является, потому
что, как вы помните, там View и Controller тесно связаны, в то время
как посредник в MVP — Presenter — не имеет отношения к
жизненному циклу View Controller. View может быть легко заменена
Mock-объектами, поэтому в Presenter нет layout-кода, но он отвечает
за обновление View в соответствии с новыми данными и состоянием.
MVP
Architecture
Он очень похож на MVP:
• MVVM рассматривает View Controller как View;
• в нем нет тесной связи между View и Model.
Кроме того, он делает биндинг как надзирающая версия MVP, но не между
View и Model, а между View и View Model.
Так что такое View Model в среде iOS? Єто независимое от UIKit
представление View и ее состояния. View Model вызывает изменения в Model
и самостоятельно обновляется с уже обновленной Model. И так как биндинг
происходит между View и View Model, то первая, соответственно, тоже
обновляется.
MVVM
Architecture
К настоящему моменту вы уже должны согласиться с тем, что разделение обязанностей
— это очень хорошо. VIPER делает еще один шаг в сторону разделения обязанностей и
вместо привычных трех слоев предлагает пять.
• Interactor содержит бизнес-логику, связанную с данными (Entities): например,
создание новых экземпляров сущностей или получение их с сервера. Для этих целей вы
будете использовать некоторые Сервисы и Менеджеры, которые рассматриваются скорее
как внешние зависимости, а не как часть модуля VIPER.
• Presenter содержит бизнес-логику, связанную c UI (но UIKit-независимую),
вызывает методы в Interactor.
• Entities — простые объекты данных, не являются слоем доступа к данным,
потому что это ответственность слоя Interactor.
• Router несет ответственность за переходы между VIPER-модулями.
VIPER
GCD
Grand Central Dispatch (GCD) - технология Apple, предназначенная для создания
приложений, использующих преимущества многоядерных процессоров и других SMP-
систем. Эта технология является реализацией параллелизма задач и основана на
шаблоне проектирования «Пул потоков». GCD впервые была представлена в Mac OS
X 10.6. Исходные коды библиотеки libdispatch, реализующей сервисы GCD, были
выпущены под лицензией Apache 10 сентября 2009 г. Впоследствии библиотека была
портирована на другую операционную систему FreeBSD.
GCD позволяет определять задачи в приложении, которые могут параллельно
выполняться, и запускает их при наличии свободных вычислительных ресурсов
(процессорных ядер).
Задача может быть определена как функция либо как «блок». Блок — это
нестандартное расширение синтаксиса языков программирования C/C++/Objective-C,
позволяющее инкапсулировать код и данные в один объект, аналог замыкания.
Grand Central Dispatch использует потоки на низком уровне, но скрывает детали
реализации от программиста. Задачи GCD легковесны, недороги в создании и
переключении; Apple утверждает, что добавление задачи в очередь требует лишь 15
процессорных инструкций, в то время как создание традиционного потока обходится в
несколько сотен инструкций.
Задача GCD может быть использована для создания рабочего элемента, который
помещается в очередь задач либо может быть привязана к источнику события. Во
втором случае при срабатывании события задача добавляется в соответствующую
очередь. Apple утверждает, что этот вариант более эффективен, нежели создавать
отдельный поток, ожидающий срабатывания события.
ARC
Каждый раз, когда вы создаете экземпляр класса, ARC выделяет фрагмент
памяти для хранения информации этого экземпляра. Этот фрагмент памяти
содержит информацию о типе экземпляра, о его значении и любых свойствах
хранения, связанных с ним.
Дополнительно, когда экземпляр больше не нужен, ARC освобождает память,
использованную под этот экземпляр, и направляет эту память туда, где она нужна.
Это своего рода гарантия того, что ненужные экземпляры не будут занимать
память.
Однако, если ARC освободит память используемого экземпляра, то доступ к
свойствам или методам этого экземпляра будет невозможен. Если вы попробуете
получить доступ к этому экземпляру, то ваше приложение скорее всего выдаст
ошибку и будет остановлено.
Для того, чтобы нужный экземпляр не пропал, ARC ведет учет количества
свойств, констант, переменных, которые ссылаются на каждый экземпляр класса.
ARC не освободит экземпляр, если есть хотя бы одна активная ссылка.
Для того чтобы это было возможно, каждый раз как вы присваиваете экземпляр
свойству, константе или переменной создается strong reference (сильная связь) с
этим экземпляром. Такая связь называется “сильной”, так как она крепко держится
за этот экземпляр и не позволяет ему освободится до тех пор, пока остаются
сильные связи.
Контакты:
• E-mail: kamiraider@gmail.com
• vk: https://vk.com/id85801198
1 de 19

Recomendados

The MVC Renaissance | Возрождение MVC por
The MVC Renaissance | Возрождение MVCThe MVC Renaissance | Возрождение MVC
The MVC Renaissance | Возрождение MVCBulat Khabirov
552 visualizações10 slides
Паттерны проектирования por
Паттерны проектированияПаттерны проектирования
Паттерны проектированияITCP Community
131 visualizações26 slides
ASP.NET MVC por
ASP.NET MVCASP.NET MVC
ASP.NET MVCGetDev.NET
784 visualizações21 slides
Как и зачем мы тестируем UI por
Как и зачем мы тестируем UIКак и зачем мы тестируем UI
Как и зачем мы тестируем UIVyacheslav Lyalkin
14.1K visualizações22 slides
VIPER architecture por
VIPER architectureVIPER architecture
VIPER architectureAlex Rudyak
386 visualizações48 slides
AngularJS basics & theory por
AngularJS basics & theoryAngularJS basics & theory
AngularJS basics & theoryDevOWL Meetup
40.2K visualizações18 slides

Mais conteúdo relacionado

Destaque

iOS Dev Moscow: Как получать заказы по рекомендациям por
iOS Dev Moscow: Как получать заказы по рекомендациямiOS Dev Moscow: Как получать заказы по рекомендациям
iOS Dev Moscow: Как получать заказы по рекомендациямAlina Mikhaylova
395 visualizações14 slides
Concurrent Programming in iOS por
Concurrent Programming in iOSConcurrent Programming in iOS
Concurrent Programming in iOSSam Mejlumyan
181 visualizações19 slides
Rambler.iOS #2: Адаптивная верстка iOS приложений por
Rambler.iOS #2: Адаптивная верстка iOS приложенийRambler.iOS #2: Адаптивная верстка iOS приложений
Rambler.iOS #2: Адаптивная верстка iOS приложенийRAMBLER&Co
2.5K visualizações21 slides
Introduction in TDD por
Introduction in TDDIntroduction in TDD
Introduction in TDDSam Mejlumyan
504 visualizações11 slides
Workflow in app dev companies por
Workflow in app dev companiesWorkflow in app dev companies
Workflow in app dev companiesAlex Nilinad
185 visualizações19 slides
Как начать карьеру в удаленной работе por
Как начать карьеру в удаленной работеКак начать карьеру в удаленной работе
Как начать карьеру в удаленной работеAlina Mikhaylova
359 visualizações21 slides

Destaque(10)

iOS Dev Moscow: Как получать заказы по рекомендациям por Alina Mikhaylova
iOS Dev Moscow: Как получать заказы по рекомендациямiOS Dev Moscow: Как получать заказы по рекомендациям
iOS Dev Moscow: Как получать заказы по рекомендациям
Alina Mikhaylova395 visualizações
Concurrent Programming in iOS por Sam Mejlumyan
Concurrent Programming in iOSConcurrent Programming in iOS
Concurrent Programming in iOS
Sam Mejlumyan181 visualizações
Rambler.iOS #2: Адаптивная верстка iOS приложений por RAMBLER&Co
Rambler.iOS #2: Адаптивная верстка iOS приложенийRambler.iOS #2: Адаптивная верстка iOS приложений
Rambler.iOS #2: Адаптивная верстка iOS приложений
RAMBLER&Co2.5K visualizações
Introduction in TDD por Sam Mejlumyan
Introduction in TDDIntroduction in TDD
Introduction in TDD
Sam Mejlumyan504 visualizações
Workflow in app dev companies por Alex Nilinad
Workflow in app dev companiesWorkflow in app dev companies
Workflow in app dev companies
Alex Nilinad185 visualizações
Как начать карьеру в удаленной работе por Alina Mikhaylova
Как начать карьеру в удаленной работеКак начать карьеру в удаленной работе
Как начать карьеру в удаленной работе
Alina Mikhaylova359 visualizações
Why have your CV professionally written? por ABCV Solutions
Why have your CV professionally written?Why have your CV professionally written?
Why have your CV professionally written?
ABCV Solutions143 visualizações
Оценка трудоемкости задач por Zorin Danny
Оценка трудоемкости задачОценка трудоемкости задач
Оценка трудоемкости задач
Zorin Danny418 visualizações
Rambler.iOS #6: Не рычите на pbxproj por RAMBLER&Co
Rambler.iOS #6: Не рычите на pbxprojRambler.iOS #6: Не рычите на pbxproj
Rambler.iOS #6: Не рычите на pbxproj
RAMBLER&Co785 visualizações
Rambler.iOS #6: App delegate - разделяй и властвуй por RAMBLER&Co
Rambler.iOS #6: App delegate - разделяй и властвуйRambler.iOS #6: App delegate - разделяй и властвуй
Rambler.iOS #6: App delegate - разделяй и властвуй
RAMBLER&Co941 visualizações

Similar a Как пройти собеседование и получить первую работу на Swift

Шаблоны проектирования в Magento por
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в MagentoPavel Usachev
2.3K visualizações25 slides
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK por
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKCisco Russia
374 visualizações37 slides
ASP.NET, MVC, ASP.NET MVC por
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCGetDev.NET
2.6K visualizações29 slides
Модифицируемость программных систем por
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных системDima Dzuba
581 visualizações35 slides
Стандарты и соглашения в сложных ООП-приложениях por
Стандарты и соглашения в сложных ООП-приложенияхСтандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложенияхMagecom Ukraine
539 visualizações32 slides
C# Desktop. Занятие 01. por
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.Igor Shkulipa
307 visualizações44 slides

Similar a Как пройти собеседование и получить первую работу на Swift(20)

Шаблоны проектирования в Magento por Pavel Usachev
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в Magento
Pavel Usachev2.3K visualizações
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK por Cisco Russia
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Cisco Russia 374 visualizações
ASP.NET, MVC, ASP.NET MVC por GetDev.NET
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
GetDev.NET2.6K visualizações
Модифицируемость программных систем por Dima Dzuba
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных систем
Dima Dzuba581 visualizações
Стандарты и соглашения в сложных ООП-приложениях por Magecom Ukraine
Стандарты и соглашения в сложных ООП-приложенияхСтандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложениях
Magecom Ukraine539 visualizações
C# Desktop. Занятие 01. por Igor Shkulipa
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.
Igor Shkulipa307 visualizações
PostSharp - Threading Model por Andrey Gordienkov
PostSharp - Threading ModelPostSharp - Threading Model
PostSharp - Threading Model
Andrey Gordienkov323 visualizações
PostSharp - Threading Model Library por Andrey Gordienkov
PostSharp - Threading Model LibraryPostSharp - Threading Model Library
PostSharp - Threading Model Library
Andrey Gordienkov4.8K visualizações
C# Desktop. Занятие 15. por Igor Shkulipa
C# Desktop. Занятие 15.C# Desktop. Занятие 15.
C# Desktop. Занятие 15.
Igor Shkulipa180 visualizações
Genome por ozzy_ext
GenomeGenome
Genome
ozzy_ext414 visualizações
Экскурс в мир WEB разработки por IT-Доминанта
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработки
IT-Доминанта1.7K visualizações
Text por Inna Tuyeva
TextText
Text
Inna Tuyeva287 visualizações
C# Web. Занятие 09. por Igor Shkulipa
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
Igor Shkulipa1.6K visualizações
введение в объектно ориентированный анализ por Maksim Nikitin
введение в объектно ориентированный анализвведение в объектно ориентированный анализ
введение в объектно ориентированный анализ
Maksim Nikitin169 visualizações
разработка бизнес приложений (9) por Alexander Gornik
разработка бизнес приложений (9)разработка бизнес приложений (9)
разработка бизнес приложений (9)
Alexander Gornik878 visualizações
Лекции и задания по рнр por Rauan Ibraikhan
Лекции и задания по рнрЛекции и задания по рнр
Лекции и задания по рнр
Rauan Ibraikhan318 visualizações
45695 por 89511602288Q
4569545695
45695
89511602288Q206 visualizações
Нотации оформления требований por JaneKozmina
Нотации оформления требованийНотации оформления требований
Нотации оформления требований
JaneKozmina3.8K visualizações
разработка бизнес приложений (7) por Alexander Gornik
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
Alexander Gornik475 visualizações

Как пройти собеседование и получить первую работу на Swift

  • 1. Как пройти собеседование и получить первую работу как trainee-to-junior developer И что для этого нужно знать:
  • 2. Что нужно знать? • UIKit • App life-cycle • ViewController life-cycle • GCD • Patterns • OOP • Architecture • MVC • RESTfull API • Delegate • Protocols • ARC
  • 3. UIKit UIKit - это библиотека, обеспечивающая ключевую инфрастуктуру, необходимую для построения iOS-приложений. UIKit содержит огромное количество классов, позволяющих строить визуальные элементы, анимировать их, обрабатывать физические законы, управлять механизмами печать, обработки текста и многое другое. Это важнейшая и совершенно незаменимая библиотека методов, которую вы будете использовать при разработке каждого приложения
  • 4. App life-cicle • didFinishLaunchingWithOptions (1) • applicationWillResignActive (3) • ApplicationDidBecomeActive (2) • applicationWillEnterForeground (4) • applicationWillTerminate (Приложение успешно запустилось) (Переключение на другое приложение или нажатие кнопки Home) Обычно на этом этапе приостанавливаются какие-то задачи или ставится на паузу игра. В этом месте мы ставим «на паузу» пользовательский интерфейс. (Приложение перешло в состояние Active) Следует перезапустить все задачи, которые были поставлены на паузу в предыдущем состоянии, или которые были не запущены вовсе. Если приложение пришло из Background опционально обновить интерфейс.
  • 5. App life-cycle • applicationWillEnterForeground (4) • applicationWillTerminate • applicationDidEnterBackground (3) (Переход в состояние Background) Тут нужно сохранять пользовательские данные, или сохранять состояние приложения, чтобы оно запустилось с места остановки. (Переход из Background в состояние Foreground) В этом состоянии можно сменить все изменения, сделанные в состоянии Background. (Пользователь закрывает приложение)
  • 7. OOP • Абстракция данных • Инкапсуляция • Полиморфизм подтипов Абстрагирование означает выделение значимой информации и исключение из рассмотрения незначимой. В ООП рассматривают лишь абстракцию данных (нередко называя ее просто «абстракцией»), подразумевая набор значимых характеристик объекта, доступный остальной программе. Свойство системы, позволяющие объединить данные и методы, работающие с ними, в классе. Одни языки (C++, Java, Ruby) отождествляют инкапсуляцию с сокрытием, другие различают эти понятия. Свойство системы, позволяющие использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
  • 8. OOP • Класс • Объект Универсальный, комплексный тип данных, состоящий из тематически единого набора «полей» (переменных более элементарных типов) и «методов» (функций для работы с этими полями), то есть он является моделью информационной сущности с внутренним и внешним интерфейсами для оперирования своим содержимым. В частности, в классах широко используются специальные блоки из одного или чаще двух спаренных методов, отвечающих за элементарные операции с определенным полем (интерфейс присваивания и считывания значения). При копировании соответствующей переменной через присваивание, копируется только интерфейс, но не сами данные, то есть класс - ссылочный тип данных. Переменная-объект, относящаяся к заданному классом типу называется экземпляром класса. Обычно классы разрабатывают таким образом, чтобы обеспечить отвечающие природе объекта и решаемой задаче целостность данных объекта, а также удобный и простой интерфейс. В свою очередь, целостность предметной области объектов, а также удобный и простой интерфейс. В свою очередь, целостность предметной области объектов и их интерфейсов, а также удобство их проектирования, обеспечивается наследованием. Сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса (например, после запуска результатов компиляции и связывания исходного кода на выполнение)
  • 9. MVC жения, пользовательского интерфейса и управляющей логики на три отдельных компонента
  • 10. RESTful API REST (RESTful) - это общие принципы организации взаимодействия приложения/сайта с сервером посредством протокола HTTP. Особенность REST в том, что сервер не запоминает состояние пользователя между запросами - в каждом запросе передаётся информация, идентифицирующая пользователя (например, token, полученный через OAuth-авторизацию) и все параметры, необходимые для выполнения операции. Всё взаимодействие с сервером сводится к 4 операциям (4 - это необходимый и достаточный минимум, в конкретной реализации типов операций может быть больше): 1. получение данных с сервера (обычно в формате JSON, или XML) 2. добавление новых данных на сервер 3. модификация существующих данных на сервере 4. удаление данных на сервере Операция получения данных не может приводить к изменению состояния сервера. Для каждого типа операции используется свой метод HTTP-запроса: 1. получение - GET 2. добавление - POST 3. модификация - PUT 4. удаление - DELETE
  • 11. Delegate Делегирование - это шаблон, который позволяет классу или структуре передавать (или делегировать) некоторую ответственность экземпляру другого типа. Этот шаблон реализуется определением протокола, который инкапсулирует делегируемые полномочия, таким образом, что соответствующий протоколу тип (делегат) гарантировано получит функциональность, которая была ему делегирована. Делегирование может быть использовано для ответа на конкретное действие или для получения данных из внешнего источника без необходимости знания типа источника.
  • 12. Protocols Протокол определяет образец методов, свойств или другие требования, которые соответствуют определенному конкретному заданию или какой-то функциональности. Протокол фактически не предоставляет реализацию для любого из этих требований, он только описывает как реализация должна выглядеть. Протокол может быть принят классом, структурой или перечислением для обеспечения фактической реализации этих требований. Любой тип, который удовлетворяет требованиям протокола, имеет указание соответствовать этому протоколу. В дополнение к определенным требованиям, которые должны быть реализованы подписанными под протокол типами, вы можете расширить протокол, чтобы реализовать некоторые из этих требований или для того, чтобы реализовать дополнительную функциональность, которую смогут использовать подписанные под протокол типы.
  • 13. Patterns Шаблон проектирования или паттерн (англ. design pattern) в разработке программного обеспечения — повторимая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста. Singleton
  • 14. Architecture Разве это не похоже на «яблочный» MVC? На самом деле — очень, а имя ему — MVP (вариант с пассивной View). Но означает ли это, что MVC от Apple на самом деле является MVP? Нет, не является, потому что, как вы помните, там View и Controller тесно связаны, в то время как посредник в MVP — Presenter — не имеет отношения к жизненному циклу View Controller. View может быть легко заменена Mock-объектами, поэтому в Presenter нет layout-кода, но он отвечает за обновление View в соответствии с новыми данными и состоянием. MVP
  • 15. Architecture Он очень похож на MVP: • MVVM рассматривает View Controller как View; • в нем нет тесной связи между View и Model. Кроме того, он делает биндинг как надзирающая версия MVP, но не между View и Model, а между View и View Model. Так что такое View Model в среде iOS? Єто независимое от UIKit представление View и ее состояния. View Model вызывает изменения в Model и самостоятельно обновляется с уже обновленной Model. И так как биндинг происходит между View и View Model, то первая, соответственно, тоже обновляется. MVVM
  • 16. Architecture К настоящему моменту вы уже должны согласиться с тем, что разделение обязанностей — это очень хорошо. VIPER делает еще один шаг в сторону разделения обязанностей и вместо привычных трех слоев предлагает пять. • Interactor содержит бизнес-логику, связанную с данными (Entities): например, создание новых экземпляров сущностей или получение их с сервера. Для этих целей вы будете использовать некоторые Сервисы и Менеджеры, которые рассматриваются скорее как внешние зависимости, а не как часть модуля VIPER. • Presenter содержит бизнес-логику, связанную c UI (но UIKit-независимую), вызывает методы в Interactor. • Entities — простые объекты данных, не являются слоем доступа к данным, потому что это ответственность слоя Interactor. • Router несет ответственность за переходы между VIPER-модулями. VIPER
  • 17. GCD Grand Central Dispatch (GCD) - технология Apple, предназначенная для создания приложений, использующих преимущества многоядерных процессоров и других SMP- систем. Эта технология является реализацией параллелизма задач и основана на шаблоне проектирования «Пул потоков». GCD впервые была представлена в Mac OS X 10.6. Исходные коды библиотеки libdispatch, реализующей сервисы GCD, были выпущены под лицензией Apache 10 сентября 2009 г. Впоследствии библиотека была портирована на другую операционную систему FreeBSD. GCD позволяет определять задачи в приложении, которые могут параллельно выполняться, и запускает их при наличии свободных вычислительных ресурсов (процессорных ядер). Задача может быть определена как функция либо как «блок». Блок — это нестандартное расширение синтаксиса языков программирования C/C++/Objective-C, позволяющее инкапсулировать код и данные в один объект, аналог замыкания. Grand Central Dispatch использует потоки на низком уровне, но скрывает детали реализации от программиста. Задачи GCD легковесны, недороги в создании и переключении; Apple утверждает, что добавление задачи в очередь требует лишь 15 процессорных инструкций, в то время как создание традиционного потока обходится в несколько сотен инструкций. Задача GCD может быть использована для создания рабочего элемента, который помещается в очередь задач либо может быть привязана к источнику события. Во втором случае при срабатывании события задача добавляется в соответствующую очередь. Apple утверждает, что этот вариант более эффективен, нежели создавать отдельный поток, ожидающий срабатывания события.
  • 18. ARC Каждый раз, когда вы создаете экземпляр класса, ARC выделяет фрагмент памяти для хранения информации этого экземпляра. Этот фрагмент памяти содержит информацию о типе экземпляра, о его значении и любых свойствах хранения, связанных с ним. Дополнительно, когда экземпляр больше не нужен, ARC освобождает память, использованную под этот экземпляр, и направляет эту память туда, где она нужна. Это своего рода гарантия того, что ненужные экземпляры не будут занимать память. Однако, если ARC освободит память используемого экземпляра, то доступ к свойствам или методам этого экземпляра будет невозможен. Если вы попробуете получить доступ к этому экземпляру, то ваше приложение скорее всего выдаст ошибку и будет остановлено. Для того, чтобы нужный экземпляр не пропал, ARC ведет учет количества свойств, констант, переменных, которые ссылаются на каждый экземпляр класса. ARC не освободит экземпляр, если есть хотя бы одна активная ссылка. Для того чтобы это было возможно, каждый раз как вы присваиваете экземпляр свойству, константе или переменной создается strong reference (сильная связь) с этим экземпляром. Такая связь называется “сильной”, так как она крепко держится за этот экземпляр и не позволяет ему освободится до тех пор, пока остаются сильные связи.