Специализация
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 в телеграм
В чём разница между weak и unowned? Где предпочтительнее использовать unowned?
weak хранит ссылку, которая автоматически обнуляется, когда объект деинициализируется, и требует опционального типа. unowned — неконтролируемая ссылка, не обнуляется и объявляется не-опциональным. unowned используют, когда зависимый объект гарантированно живет дольше или так же долго, как и владелец.
Почему unowned считается быстрее weak? Как это реализовано на уровне runtime?
weak ссылки требуют проверки и автоматического обнуления при деинициализации объекта, что добавляет накладные расходы на хранение в таблице слабых ссылок. unowned — обычный указатель без дополнительной обработки. В runtime это отличается отсутствием регистрации в weak-таблице и лишних проверок.
Расскажи про strong, weak и unowned ссылки. Сравни weak и unowned.
Strong ссылки увеличивают счётчик ссылок и удерживают объект в памяти. Weak ссылки не увеличивают счётчик и становятся nil, когда объект удаляется. Unowned ссылки также не увеличивают счётчик, но вызывают crash при обращении к удалённому объекту. Weak безопаснее, но unowned немного быстрее.
Почему использование unowned может быть опасным?
unowned используется для не удерживающих ссылок, которые никогда не должны быть nil. Опасность в том, что при обращении к уже деинициализированному объекту приложение упадёт с крашем. В отличие от weak, unowned не обнуляется автоматически. Поэтому его можно использовать только тогда, когда жизненный цикл объектов строго гарантирован. В реальных проектах эта гарантия часто нарушается.
Почему weak является optional, а unowned — нет?
weak ссылка может стать nil, если объект был освобожден. Поэтому она обязана быть optional. unowned предполагает, что объект всегда существует в момент обращения. Если объект будет освобожден раньше, приложение упадет. Это принципиальная разница в контракте использования.
Рейтинг:
2
Сложность:
7
Рейтинг:
2
Сложность:
6
Рейтинг:
2
Сложность:
8
Рейтинг:
5
Сложность:
7
Рейтинг:
4
Сложность:
6