Мы используем файлы cookie для улучшения работы сайта и предоставления вам персонализированного опыта. Правила использования файлов cookie можно найти в нашей политике конфиденциальности
В iOS нет классического сборщика мусора (garbage collector) в привычном смысле, как, например, в Java или C#. Вместо него используется механизм автоматического управления памятью, основанный на подсчете ссылок.
Исторически в Objective-C была ручная модель управления памятью (Manual Reference Counting - MRC), затем появился Automatic Reference Counting (ARC). В Swift используется только ARC.
ARC (Automatic Reference Counting)
ARC - это механизм компилятора, который автоматически вставляет вызовы методов управления памятью, таких как retain
, release
и autorelease
(в Objective-C) или аналогичные операции в Swift.
Ключевые принципы работы ARC:
strong
в Swift, retain
по умолчанию в Objective-C), счетчик ссылок увеличивается на единицу.nil
), счетчик ссылок уменьшается на единицу.deinit
(в Swift) или dealloc
(в Objective-C).Типы ссылок в Swift:
strong
: Делает объект владельцем ссылки, увеличивает счетчик ссылок. Является типом ссылки по умолчанию.weak
: Не делает объект владельцем ссылки, не увеличивает счетчик ссылок. Используется для предотвращения циклов сильных ссылок. При освобождении объекта, на который ссылается слабая ссылка, она automatically устанавливается в nil
. Используется с опциональными типами.unowned
: Подобна weak
, но не обнуляется при освобождении объекта. Требует, чтобы объект существовал на протяжении всего времени жизни ссылки. Не является опциональным типом. Используется, когда гарантируется, что ссылка всегда будет указывать на действительный объект.Циклы сильных ссылок:
Основная проблема ARC - это циклы сильных ссылок (retain cycles). Они возникают, когда два или более объекта имеют сильные ссылки друг на друга, и ни один из них не может быть освобожден, потому что их счетчики ссылок никогда не достигнут нуля.
Пример цикла сильных ссылок:
swift
В iOS нет классического сборщика мусора (garbage collector) в привычном смысле, как, например, в Java или C#. Вместо него используется механизм автоматического управления памятью, основанный на подсчете ссылок.
Исторически в Objective-C была ручная модель управления памятью (Manual Reference Counting - MRC), затем появился Automatic Reference Counting (ARC). В Swift используется только ARC.
ARC (Automatic Reference Counting)
ARC - это механизм компилятора, который автоматически вставляет вызовы методов управления памятью, таких как retain
, release
и autorelease
(в Objective-C) или аналогичные операции в Swift.
Ключевые принципы работы ARC:
strong
в Swift, retain
по умолчанию в Objective-C), счетчик ссылок увеличивается на единицу.nil
), счетчик ссылок уменьшается на единицу.deinit
(в Swift) или dealloc
(в Objective-C).Типы ссылок в Swift:
strong
: Делает объект владельцем ссылки, увеличивает счетчик ссылок. Является типом ссылки по умолчанию.weak
: Не делает объект владельцем ссылки, не увеличивает счетчик ссылок. Используется для предотвращения циклов сильных ссылок. При освобождении объекта, на который ссылается слабая ссылка, она automatically устанавливается в nil
. Используется с опциональными типами.unowned
: Подобна weak
, но не обнуляется при освобождении объекта. Требует, чтобы объект существовал на протяжении всего времени жизни ссылки. Не является опциональным типом. Используется, когда гарантируется, что ссылка всегда будет указывать на действительный объект.Циклы сильных ссылок:
Основная проблема ARC - это циклы сильных ссылок (retain cycles). Они возникают, когда два или более объекта имеют сильные ссылки друг на друга, и ни один из них не может быть освобожден, потому что их счетчики ссылок никогда не достигнут нуля.
Пример цикла сильных ссылок:
swift
Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.