Что такое retain cycle и как его разорвать в Obj-C?
Суть
Retain cycle — два (или больше) объекта держат друг друга сильными ссылками, счётчик ни у одного не доходит до нуля, dealloc не вызывается — утечка. ARC этого не отслеживает: он только считает ссылки, а не ищет недостижимые графы.
Классические случаи:
delegate, объявленный какstrong;- блок, сохранённый в свойство объекта и захвативший
self; NSTimerс target (таймер удерживает target, пока неinvalidate);- родитель ↔ ребёнок в дереве моделей.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep