Если вы читаете это, это означает, что вам задавали этот вопрос на любом из интервью по разработке iOS, в котором вы участвовали, что могло быть или не быть в вашу сторону, но не волнуйтесь, я здесь, чтобы дать вам все важную информацию по этой теме.

Не только ради интервью, но и как разработчик iOS, который использует Swift в качестве языка программирования, мы обязаны знать это, и знание этого только сделает нас лучшим разработчиком iOS, и, в конце концов, это то, что имеет значение. большинство.

Давайте погрузимся прямо в это..

Основное различие между классами и структурами в Swift:

  • Класс является ссылочнымтипом
  • Структура представляет собой значениетипа

Не волнуйся, я тебя прикрою…

Тип ссылки:

  • Экземпляр ссылочного типа использует одну копию данных. Это означает, что если вы создаете экземпляр ссылочного типа и присваиваете значение переменной, и если вы передаете эту переменную функции или присваиваете эту переменную другой переменной, вы просто передаете ссылку на только что созданный экземпляр, и если вы попробуйте получить доступ и изменить из любого места, используя эту ссылку, фактический экземпляр будет изменен.
  • Наряду с классами, функции и замыкания являются ссылочными типами.

Тип значения:

  • Каждый экземпляр этого типа создает новую копию данных каждый раз, когда они передаются в коде. И каждый экземпляр хранит уникальный набор данных при себе. Представьте, что вы создали экземпляр типа значения, и если вы передаете этот экземпляр, создается еще одна копия, и она передается, поэтому, если вы внесете изменения в переданную копию, исходный экземпляр не будет изменен.
  • Примитивные типы данных, такие как Int, String, Double, а также типы данных Swift, такие как Array, Dictionary, Set, Enum, Tuple, являются типами значений.

Теперь мы рассмотрим другие различия между классами и структурами.

Вещи, которые могут делать только классы

  • Наследование
  • Тип литья
  • ARC (автоматический подсчет ссылок)
  • Наличие деинициализаторов
  • Совместимость с Objective-C

Общие черты классов и структур:

  • Определите свойства для хранения значений
  • Определение методов для обеспечения функциональности
  • Быть расширенным
  • Соответствовать протоколам
  • Определить инициализаторы
  • Определите индексы, чтобы предоставить доступ к их переменным

Классы можно использовать в следующих сценариях:

  1. Когда вам нужна совместимость с Objective-C в вашем приложении. Это означает, что вы работаете над проектом, в котором вы должны предоставить свой быстрый код среде Objective-C, а может быть и наоборот.
  2. И когда вам нужно контролировать идентичность данных, которые вы моделируете. В основном это означает, что если вы передаете свои данные из одного класса в несколько классов, и если доступ к вашим данным осуществляется в многопоточной среде, и вы хотите защитить идентичность своих данных, вы можете использовать классы.

Структуры для спасения, когда:

  1. Ну, в документации Apple говорится, что по умолчанию просто используйте Structs. Означает, что если вы можете поверить, что можете достичь той же функциональности, используя классы, для которых вы хотели, вы также можете использовать Structs, если вас не беспокоит состояние вашей личности ваших данных, и у вас нет совместимости с Objective-C. в вашем приложении.
  2. И для достижения этой функциональности вы можете использовать структуры вместе с протоколами.

Угадайте, чем больше вы избегаете классов, тем больше вам не нужно беспокоиться о циклах сохранения и управлении памятью в вашем приложении.

Мы всего в одном последнем барьере от завершения нашей темы. И это следующим образом

Выделение памяти для классов и структур

  • Классы ссылочного типа хранятся в куче памяти.
  • Структуры типа Value хранятся в памяти стека.

В Swift типы ссылок хранятся в памяти кучи, а типы значений хранятся в памяти стека, поэтому классы хранятся в памяти кучи, а структуры — в памяти стека. Но оба хранятся в оперативной памяти компьютера.

Куча следует за распределением динамической памяти, а стек следует за распределением статической памяти.

Для получения дополнительной информации о статическом и динамическом распределении памяти вы можете прочитать эту статью из StackOverFlow.

Вот и все… Увидимся!!!

Если вам понравилась эта статья, вы можете поделиться ею со своими друзьями-разработчиками iOS и, пожалуйста, похлопайте, чтобы она дошла до других.