Начальный уровень. Работа с памятью.
Расскажите про работу с памятью в Swift.
Доброго времени суток! Сегодня мы начнём разбирать вопрос, который попадается на собеседовании в не зависимости от роли, на которую вы претендуете. В этом посте разберём что необходимо знать джуну для ответа, а именно что такое reference/value type, что хранится в стеке, а что в куче, принцип работы arc, как избежать зацикливания сильных ссылок.
Value/Reference Types
Value и Reference Types — это основные концепции Swift. В Swift есть три способа объявления типа: классы, структуры и перечисления. Их можно разделить на типы значений (структуры, перечисления, базовые типы) и ссылочные типы (классы, функции, замыкания). То, как они хранятся в памяти, определяет разницу между ними:
• Value Type — каждая переменная типа значения имеет свою собственную копию данных, и операции с одной не влияют на другую. За него отвечает стэк;
• Reference Type — у нас есть ссылка, указывающая на это место в памяти. Переменные ссылочного типа могут указывать на одни и те же данные; следовательно, операции с одной переменной могут повлиять на данные, указанные другой переменной. За него отвечает куча.
ARC
Количество ссылок на один объект может увеличиваться и уменьшаться. В Swift для того чтобы отслеживать этого количество и при уменьшении его до нуля освобождать объект из памяти существует механизм ARC (Automatic Reference Counter).
Retain cycle
При подсчете ссылок может возникнуть ситуация, когда два объекта ссылаются друг на друга, что делает невозможным их высвобождение из памяти, потому что оба их счетчика ссылок (retain count) всегда будут равны единице или больше. То есть происходит ситуация зацикливания сильных ссылок (retain cycle). Для ее исправления нужно сделайте одну из ссылок weak или unowned.
• Слабая(weak) ссылка: не увеличивает счетчик ссылок. Слабые ссылки всегда объявляются как необязательные (optional) типы. Когда счетчик ссылок становится равным нулю, объект автоматически будет деаллоцирован.
• Unowned ссылки: тут точно так же, как и со слабыми ссылками. Она не увеличивает счетчик ссылок. Основное отличие в том, что это не необязательный тип. Если вы попытаетесь получить доступ к unowned свойству, которое ссылается на деинициализированный объект, вы получите ошибку времени выполнения, сравнимую с принудительной распаковкой необязательного типа с nil.
Это краткий ответ по основным пунктам, более подробно в том числе про кучу и стек по ссылке снизу 👇👇👇
#SwiftInterviewBeginner
#SwiftInterviewMemory
https://habr.com/ru/company/otus/blog/649329/
Расскажите про работу с памятью в Swift.
Доброго времени суток! Сегодня мы начнём разбирать вопрос, который попадается на собеседовании в не зависимости от роли, на которую вы претендуете. В этом посте разберём что необходимо знать джуну для ответа, а именно что такое reference/value type, что хранится в стеке, а что в куче, принцип работы arc, как избежать зацикливания сильных ссылок.
Value/Reference Types
Value и Reference Types — это основные концепции Swift. В Swift есть три способа объявления типа: классы, структуры и перечисления. Их можно разделить на типы значений (структуры, перечисления, базовые типы) и ссылочные типы (классы, функции, замыкания). То, как они хранятся в памяти, определяет разницу между ними:
• Value Type — каждая переменная типа значения имеет свою собственную копию данных, и операции с одной не влияют на другую. За него отвечает стэк;
• Reference Type — у нас есть ссылка, указывающая на это место в памяти. Переменные ссылочного типа могут указывать на одни и те же данные; следовательно, операции с одной переменной могут повлиять на данные, указанные другой переменной. За него отвечает куча.
ARC
Количество ссылок на один объект может увеличиваться и уменьшаться. В Swift для того чтобы отслеживать этого количество и при уменьшении его до нуля освобождать объект из памяти существует механизм ARC (Automatic Reference Counter).
Retain cycle
При подсчете ссылок может возникнуть ситуация, когда два объекта ссылаются друг на друга, что делает невозможным их высвобождение из памяти, потому что оба их счетчика ссылок (retain count) всегда будут равны единице или больше. То есть происходит ситуация зацикливания сильных ссылок (retain cycle). Для ее исправления нужно сделайте одну из ссылок weak или unowned.
• Слабая(weak) ссылка: не увеличивает счетчик ссылок. Слабые ссылки всегда объявляются как необязательные (optional) типы. Когда счетчик ссылок становится равным нулю, объект автоматически будет деаллоцирован.
• Unowned ссылки: тут точно так же, как и со слабыми ссылками. Она не увеличивает счетчик ссылок. Основное отличие в том, что это не необязательный тип. Если вы попытаетесь получить доступ к unowned свойству, которое ссылается на деинициализированный объект, вы получите ошибку времени выполнения, сравнимую с принудительной распаковкой необязательного типа с nil.
Это краткий ответ по основным пунктам, более подробно в том числе про кучу и стек по ссылке снизу 👇👇👇
#SwiftInterviewBeginner
#SwiftInterviewMemory
https://habr.com/ru/company/otus/blog/649329/
Хабр
Память в Swift (куча, стек, ARC)
Для хранения объектов Swift использует две структуры данных: стек и кучу. Управление распределением памяти подразумевает выделение памяти под объект (аллокацию) и ее последующее высвобождение...
👍8🔥3
Forwarded from Mobile Events - митапы, конференции, хакатоны и другие интересные мероприятия по мобильной разработке
Mobius — большая техническая конференция по мобильной разработке.
🗓 Ближайшая конференция: Mobius 2022 Autumn, 9–10 ноября · Online
🗓 Offline-день + Online: 21 ноября · Москва
Темы конференции:
✅ Работа платформ (iOS / Android) и языков программирования (Swift / Kotlin / Flutter / Java) под капотом;
✅ Software Craftsmanship (подходы и практики в разработке мобильных приложений и работе с фреймворками);
✅ Архитектура (архитектурные паттерны, legacy и рефакторинг, модуляризация);
✅ Качество продукта (производительность, UI/UX, безопасность);
✅ Тренды в мобильной разработке (SPM, open source-решения и лучшие практики)
А кроме этого — еще 41 спикер из Яндекса, Сбера, Gradle, VK, Тинькофф, Skyeng и других компаний 🔥🔥🔥
На Mobius вы сможете не только послушать выступления, но и задать вопросы спикерам, а также пообщаться с другими единомышленниками. И промокоды mobileproglib2022JRGpc, iosheads2022JRGpc дадут скидку от 20% на билеты из категории «Для частных лиц».
👉 Подробности и билеты: mobiusconf.com
🗓 Ближайшая конференция: Mobius 2022 Autumn, 9–10 ноября · Online
🗓 Offline-день + Online: 21 ноября · Москва
Темы конференции:
✅ Работа платформ (iOS / Android) и языков программирования (Swift / Kotlin / Flutter / Java) под капотом;
✅ Software Craftsmanship (подходы и практики в разработке мобильных приложений и работе с фреймворками);
✅ Архитектура (архитектурные паттерны, legacy и рефакторинг, модуляризация);
✅ Качество продукта (производительность, UI/UX, безопасность);
✅ Тренды в мобильной разработке (SPM, open source-решения и лучшие практики)
А кроме этого — еще 41 спикер из Яндекса, Сбера, Gradle, VK, Тинькофф, Skyeng и других компаний 🔥🔥🔥
На Mobius вы сможете не только послушать выступления, но и задать вопросы спикерам, а также пообщаться с другими единомышленниками. И промокоды mobileproglib2022JRGpc, iosheads2022JRGpc дадут скидку от 20% на билеты из категории «Для частных лиц».
👉 Подробности и билеты: mobiusconf.com
👍8
Общие вопросы
Подготовка к нетехнической части собеседования
Друзья, всем привет! Хочу поделиться радостной новостью - вчера на Хабре вышла моя первая, так сказать, вводная статья - «Подготовка к нетехнической части собеседования». В дальнейшем планирую выкладывать там важный материал, связанный напрямую с темой моего телеграмм-канала. Возможно, часть информации, необходимой для подготовки к собеседованиям, будет выкладываться там раньше, поэтому буду признателен, если подпишитесь на меня на Хабре. Заранее спасибо и хорошего дня! Ссылка на статью👇👇👇https://habr.com/ru/post/701962/
#SwiftInterviewGeneral
#SwiftInterviewBeginner
#SwiftInterviewMedium
#SwiftInterviewAdvanced
Подготовка к нетехнической части собеседования
Друзья, всем привет! Хочу поделиться радостной новостью - вчера на Хабре вышла моя первая, так сказать, вводная статья - «Подготовка к нетехнической части собеседования». В дальнейшем планирую выкладывать там важный материал, связанный напрямую с темой моего телеграмм-канала. Возможно, часть информации, необходимой для подготовки к собеседованиям, будет выкладываться там раньше, поэтому буду признателен, если подпишитесь на меня на Хабре. Заранее спасибо и хорошего дня! Ссылка на статью👇👇👇https://habr.com/ru/post/701962/
#SwiftInterviewGeneral
#SwiftInterviewBeginner
#SwiftInterviewMedium
#SwiftInterviewAdvanced
Хабр
Подготовка к нетехнической части собеседования
Для многих разработчиков (как начинающих, так и опытных) собеседование – стресс. Для меня корни этой проблемы уходят в школьное прошлое, когда я боялся выходить к доске на уроках русского языка. Имея...
🔥8❤1