Мы используем файлы cookie
Мы используем файлы cookie для улучшения работы сайта и предоставления вам персонализированного опыта. Правила использования файлов cookie можно найти в нашей политике конфиденциальности
Утечки памяти — это ситуация, когда выделенная в памяти область более не используется программой, но при этом ссылки на нее сохраняются, препятствуя ее освобождению сборщиком мусора или системой управления памятью. В Swift, управляемом ARC (Automatic Reference Counting), утечки часто происходят из-за циклических сильных ссылок (strong reference cycles).
ARC учитывает количество сильных ссылок на объект и освобождает его, когда счетчик достигает нуля. Если два объекта сильно ссылаются друг на друга, их счетчики никогда не станут нулем, даже если на них больше нет внешних ссылок.
Примеры причин утечек:
Для предотвращения циклических ссылок используются слабые (weak
) и бесхозные (unowned
) ссылки:
weak
: Не увеличивает счетчик ссылок. Ссылка становится nil
, когда объект, на который она ссылается, освобождается. Используется, когда объекты имеют связанный, но не эксклюзивный жизненный цикл (например, делегат). Объявляется как опционал.unowned
: Не увеличивает счетчик ссылок. Используется, когда ссылка на объект всегда будет существовать, пока существует объект, который на нее ссылается. Является неоционалом; при попытке обращения к освобожденному объекту приводит к сбою программы (crash). Предпочтительно для ситуаций, где один объект является "родителем" другого, и "дочерний" объект не может существовать без "родителя".В замыканиях для разрыва циклов используются списки захвата (capture lists):
swift
Утечки памяти — это ситуация, когда выделенная в памяти область более не используется программой, но при этом ссылки на нее сохраняются, препятствуя ее освобождению сборщиком мусора или системой управления памятью. В Swift, управляемом ARC (Automatic Reference Counting), утечки часто происходят из-за циклических сильных ссылок (strong reference cycles).
ARC учитывает количество сильных ссылок на объект и освобождает его, когда счетчик достигает нуля. Если два объекта сильно ссылаются друг на друга, их счетчики никогда не станут нулем, даже если на них больше нет внешних ссылок.
Примеры причин утечек:
Для предотвращения циклических ссылок используются слабые (weak
) и бесхозные (unowned
) ссылки:
weak
: Не увеличивает счетчик ссылок. Ссылка становится nil
, когда объект, на который она ссылается, освобождается. Используется, когда объекты имеют связанный, но не эксклюзивный жизненный цикл (например, делегат). Объявляется как опционал.unowned
: Не увеличивает счетчик ссылок. Используется, когда ссылка на объект всегда будет существовать, пока существует объект, который на нее ссылается. Является неоционалом; при попытке обращения к освобожденному объекту приводит к сбою программы (crash). Предпочтительно для ситуаций, где один объект является "родителем" другого, и "дочерний" объект не может существовать без "родителя".В замыканиях для разрыва циклов используются списки захвата (capture lists):
swift
Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.