Выбор ответа Middle ARC и циклы ссылок обновлено

Когда нужен autoreleasepool в Swift

Вопрос

В каком случае autoreleasepool { } в Swift-коде полезен?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: В длинном цикле с autoreleased-объектами Objective-C API. Чистые Swift-объекты освобождаются ARC сразу, пул им не нужен.

Варианты ответа

  1. Всегда при создании Swift-объектов, иначе они живут до конца run loop
  2. Чтобы отключить ARC внутри блока и управлять памятью вручную
  3. В длинном цикле с autoreleased-объектами Objective-C APIправильный ответ
  4. Чтобы автоматически разорвать циклы сильных ссылок в блоке

Разбор

Чистые Swift-объекты освобождаются ARC сразу, пул им не нужен. Но Objective-C API могут возвращать autoreleased-объекты, которые живут до осушения ближайшего пула (на главном потоке обычно до конца итерации run loop). В тяжёлом цикле память растёт пиками, и вложенный autoreleasepool на каждую итерацию их сглаживает. ARC он не отключает и циклы не разрывает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.