Специализация
Python Backend Developer
Java Backend Developer
Node.js Backend Developer
Golang Backend Developer
React Frontend Developer
Выберите навыки
React
JavaScript
Git
Redux
Webpack
Сложность
1-3
4-6
7-8
9-10
Рейтинг вопросов
1
2
3
4
5
Подпишись на React Developer в телеграм
Как возникают retain cycle и как их находить?
Retain cycle возникает, когда два или более объекта удерживают друг друга сильными ссылками. В результате retain count никогда не становится равным нулю. Такие объекты не освобождаются, и возникает утечка памяти. Чаще всего retain cycle появляются в замыканиях, делегатах и взаимных ссылках между объектами.
Что такое retain cycle и как его избежать?
Retain cycle возникает, когда два или более объекта удерживают друг друга сильными ссылками. В результате ARC не может освободить память. Чаще всего это происходит между view controller и замыканиями или делегатами. Для решения используют weak или unowned ссылки. Важно осознанно управлять владением объектами.
Какие ключевые слова используются для разрыва retain cycle?
Для разрыва retain cycle в Swift используются ключевые слова weak и unowned. Они позволяют ссылке не увеличивать счетчик сильных ссылок объекта. weak используется, когда объект может быть освобожден раньше. unowned — когда гарантируется, что объект живет дольше. Правильный выбор зависит от жизненного цикла объектов.
Почему ARC не может автоматически устранять retain cycle?
ARC работает только с количеством ссылок, а не с логикой связей. Он не анализирует граф объектов целиком. Для ARC retain cycle выглядит как корректное состояние. Автоматическое разрывание таких связей могло бы привести к ошибкам. Поэтому ответственность за это лежит на разработчике.
Как решается проблема retain cycle между View и Presenter?
Проблема retain cycle решается использованием слабой ссылки (weak) со стороны Presenter на View. View продолжает хранить Presenter сильной ссылкой. Такая схема разрывает цикл владения. В результате оба объекта корректно освобождаются. Это стандартная практика в VIPER.
Рейтинг:
5
Сложность:
9
Рейтинг:
5
Сложность:
7
Рейтинг:
5
Сложность:
5
Рейтинг:
5
Сложность:
7
Рейтинг:
5
Сложность:
5