Перейти к содержимому
шпаргалка.
Esc
навигацияоткрыть⌘Jпредпросмотр
На этой странице

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

Все темы 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-ссылку вызывает ошибку времени выполнения.

Эта страница была полезной?