Перейти к содержимому
На этой странице

Работа с памятью

Все темы IOS Developer

Как организована работа с памятью в операционной системе iOS?

В приложениях на Swift ARC управляет временем жизни экземпляров классов, удерживаемых сильными ссылками. Это механизм языка и среды выполнения, а не вся система управления памятью iOS. Операционная система также управляет виртуальной памятью, изоляцией процессов и реакцией на нехватку памяти.


Как работает автоматическое управление памятью (ARC) в iOS? Что означают атрибуты: weak, unowned, strong?

ARC в Swift и Objective-C управляет временем жизни объектов по сильным ссылкам. Когда сильных ссылок не остаётся, объект освобождается. Цикл сильных ссылок ARC самостоятельно не разрывает.

  • strong: Этот атрибут используется по умолчанию и создает сильную ссылку на объект, что предотвращает освобождение памяти до тех пор, пока существует хотя бы одна сильная ссылка на объект.

  • weak: Создает слабую ссылку на объект, которая не увеличивает счетчик ссылок объекта. Если все сильные ссылки на объект исчезнут, объект будет автоматически освобожден из памяти, а слабая ссылка будет автоматически назначена nil.

  • unowned: Также создает ссылку на объект, но не увеличивает счетчик ссылок. Отличие от weak в том, что unowned предполагает, что ссылка всегда будет иметь действительное значение, и не станет nil до тех пор, пока объект жив. Если попытаться получить доступ к unowned ссылке после того, как объект был освобожден, это приведет к аварийному завершению приложения.


Какие методы используются для предотвращения утечек памяти?

Для предотвращения утечек памяти в iOS можно использовать следующие методы:

  1. Использование слабых (weak) ссылок: Используйте слабые ссылки для предотвращения циклических ссылок между объектами.

  2. Освобождение ресурсов: Объявите deinit для завершающей очистки. Его не переопределяют через override. Если объект удерживается циклом сильных ссылок, deinit не вызовется, поэтому такой цикл нужно устранить отдельно.

  3. Использование Capture Lists для замыканий: При использовании замыканий с внешним захватом объектов удостоверьтесь, что используете слабые ссылки или захватываете объекты с осторожностью, чтобы избежать циклических ссылок.

  4. Использование инструментов анализа памяти: В Xcode доступны инструменты анализа памяти, такие как Instruments, которые помогают обнаружить и исправить утечки памяти.


Что такое ARC (Automatic Reference Counting) и как он работает в Swift?

Automatic Reference Counting (ARC) — это система управления памятью в Swift, которая автоматически подсчитывает количество ссылок на каждый экземпляр объекта. Когда количество ссылок на объект становится равно нулю, объект освобождается из памяти.

Пример:

class Person {
    var name: String

    init(name: String) {
        self.name = name
        print("\(name) is initialized")
    }

    deinit {
        print("\(name) is deinitialized")
    }
}

var person1: Person? = Person(name: "John")
person1 = nil // Здесь ARC освобождает память

В чем разница между strong, weak и unowned ссылками?

Разница между атрибутами:

  • strong: Ссылка, которая удерживает объект, увеличивая счетчик ссылок. Используется по умолчанию.

  • weak: Ссылка не удерживает объект. После освобождения объекта сама слабая ссылка автоматически становится nil; это не изменение объекта.

  • unowned: Ссылка не удерживает объект и не обнуляется автоматически. Её используют, когда объект гарантированно жив при каждом обращении. Доступ после освобождения объекта через обычную unowned-ссылку вызывает ошибку времени выполнения.

Собеседования: iOS

Смотри записи интервью, узнай, какие вопросы задают и как отвечают кандидаты.

Вопросы и ответы

Не нашли ответ? Напишите мне в чат. Я делаю Шпаргалку и сам отвечаю на сообщения. Расскажите, что не работает или чего вам не хватает. Может, смогу сразу взять это в работу.

Откуда взяты вопросы?

Из реальных собеседований. Основой подборки стал опыт Вадима Новосёлова: он проходил интервью и записывал вопросы. Подробнее о материалах.

Насколько эти вопросы актуальны?

Эти вопросы встречались нам на реальных собеседованиях в 2025 году. Мы регулярно проходим собеседования и пополняем подборку новыми вопросами. Основы профессии и ключевые технологии остаются востребованными годами, а детали конкретных инструментов и версий стоит сверять с текущей документацией.

На какой уровень рассчитана подборка?

Мы проходили собеседования на вакансии уровня Middle+, а иногда и на Senior-позиции. Вопросы из этих интервью вошли в подборку. Направления работы: iOS-разработчик, Swift-разработчик. Глубина обсуждения зависит от вакансии: будь готов объяснить основную идею, привести практический пример и разобрать ограничения и альтернативы решения.

Этот вопрос точно будет на моём собеседовании?

Гарантии нет: набор вопросов зависит от компании, задач команды, уровня вакансии и самого интервьюера. Эти вопросы уже встречались на реальных собеседованиях, но на твоём интервью ту же тему могут проверить другой формулировкой, практической задачей или обсуждением твоего опыта. Используй подборку, чтобы разобраться в теме: объясняй идею своими словами, приводи примеры и готовься обсудить ограничения и альтернативы решения. Так будет проще ответить и на знакомый вопрос, и на неожиданные уточнения.