Выбор ответа Middle ARC и циклы ссылок обновлено
Когда нужен autoreleasepool в Swift
Вопрос
В каком случае autoreleasepool { } в Swift-коде полезен?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: В длинном цикле с autoreleased-объектами Objective-C API. Чистые Swift-объекты освобождаются ARC сразу, пул им не нужен.
Варианты ответа
- Всегда при создании Swift-объектов, иначе они живут до конца run loop
- Чтобы отключить ARC внутри блока и управлять памятью вручную
- В длинном цикле с autoreleased-объектами Objective-C APIправильный ответ
- Чтобы автоматически разорвать циклы сильных ссылок в блоке
Разбор
Чистые Swift-объекты освобождаются ARC сразу, пул им не нужен. Но Objective-C API могут возвращать autoreleased-объекты, которые живут до осушения ближайшего пула (на главном потоке обычно до конца итерации run loop). В тяжёлом цикле память растёт пиками, и вложенный autoreleasepool на каждую итерацию их сглаживает. ARC он не отключает и циклы не разрывает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «ARC и циклы ссылок»
- Почему делегат объявляют weak
- DispatchQueue.main.async и self
- Как найти утечку памяти в iOS-приложении
- Жизненный цикл объекта в Swift-рантайме
- Когда уместен unowned
- Задача на Swift: какие объекты утекут из-за циклов ссылок
- Инструменты для поиска проблем с памятью
- Утечка через NotificationCenter