DevPrep

Все темы › Управление памятью

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

Middle PRO

Суть

Чистые Swift-объекты через autorelease pool не проходят — ARC отпускает их сразу. Пул нужен, когда код в цикле вызывает Objective-C API, возвращающие autoreleased-объекты: UIImage(data:), Data(contentsOf:), NSString, NSAttributedString, JSONSerialization, Core Graphics/ImageIO обёртки, Core Data (NSManagedObject).

Без своего пула такие временные объекты живут до дренажа ближайшего пула: на главном потоке — до конца итерации run loop, на GCD-очереди — до конца текущего work item. В цикле на тысячи итераций пиковая память уходит в сотни мегабайт и приложение ловит jetsam, хотя «утечки» нет.

Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.

Полный ответ — в DevPrep

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store