SlideShare a Scribd company logo
1 of 19
Как пройти собеседование и
получить первую работу
как 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

More Related Content

Viewers also liked

Viewers also liked (10)

iOS Dev Moscow: Как получать заказы по рекомендациям
iOS Dev Moscow: Как получать заказы по рекомендациямiOS Dev Moscow: Как получать заказы по рекомендациям
iOS Dev Moscow: Как получать заказы по рекомендациям
 
Concurrent Programming in iOS
Concurrent Programming in iOSConcurrent Programming in iOS
Concurrent Programming in iOS
 
Rambler.iOS #2: Адаптивная верстка iOS приложений
Rambler.iOS #2: Адаптивная верстка iOS приложенийRambler.iOS #2: Адаптивная верстка iOS приложений
Rambler.iOS #2: Адаптивная верстка iOS приложений
 
Introduction in TDD
Introduction in TDDIntroduction in TDD
Introduction in TDD
 
Workflow in app dev companies
Workflow in app dev companiesWorkflow in app dev companies
Workflow in app dev companies
 
Как начать карьеру в удаленной работе
Как начать карьеру в удаленной работеКак начать карьеру в удаленной работе
Как начать карьеру в удаленной работе
 
Why have your CV professionally written?
Why have your CV professionally written?Why have your CV professionally written?
Why have your CV professionally written?
 
Оценка трудоемкости задач
Оценка трудоемкости задачОценка трудоемкости задач
Оценка трудоемкости задач
 
Rambler.iOS #6: Не рычите на pbxproj
Rambler.iOS #6: Не рычите на pbxprojRambler.iOS #6: Не рычите на pbxproj
Rambler.iOS #6: Не рычите на pbxproj
 
Rambler.iOS #6: App delegate - разделяй и властвуй
Rambler.iOS #6: App delegate - разделяй и властвуйRambler.iOS #6: App delegate - разделяй и властвуй
Rambler.iOS #6: App delegate - разделяй и властвуй
 

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

Нотации оформления требований
Нотации оформления требованийНотации оформления требований
Нотации оформления требований
JaneKozmina
 

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

Шаблоны проектирования в Magento
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в Magento
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
 
Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных систем
 
Стандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложенияхСтандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложениях
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.
 
PostSharp - Threading Model
PostSharp - Threading ModelPostSharp - Threading Model
PostSharp - Threading Model
 
PostSharp - Threading Model Library
PostSharp - Threading Model LibraryPostSharp - Threading Model Library
PostSharp - Threading Model Library
 
C# Desktop. Занятие 15.
C# Desktop. Занятие 15.C# Desktop. Занятие 15.
C# Desktop. Занятие 15.
 
Genome
GenomeGenome
Genome
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработки
 
Text
TextText
Text
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
 
Symfony 3
Symfony 3Symfony 3
Symfony 3
 
введение в объектно ориентированный анализ
введение в объектно ориентированный анализвведение в объектно ориентированный анализ
введение в объектно ориентированный анализ
 
разработка бизнес приложений (9)
разработка бизнес приложений (9)разработка бизнес приложений (9)
разработка бизнес приложений (9)
 
Лекции и задания по рнр
Лекции и задания по рнрЛекции и задания по рнр
Лекции и задания по рнр
 
45695
4569545695
45695
 
Нотации оформления требований
Нотации оформления требованийНотации оформления требований
Нотации оформления требований
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 

Как пройти собеседование и получить первую работу на 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 (сильная связь) с этим экземпляром. Такая связь называется “сильной”, так как она крепко держится за этот экземпляр и не позволяет ему освободится до тех пор, пока остаются сильные связи.