Нет, нет способа напечатать владельцев объекта, как вы описываете, по крайней мере, не совсем так. iOS не использует сборку мусора, она использует ARC (автоматический подсчет ссылок). Система не отслеживает владение ссылками в ARC. Вместо этого каждый раз, когда вы добавляете ссылку на объект, система увеличивает счетчик сохранения, и каждый раз, когда вы очищаете ссылку на владельца, система уменьшает счетчик сохранения.
Что вы можете сделать, так это запустить вашу программу с помощью инструмента памяти. (Существует приложение отладки под названием «Инструменты», вы выбираете шаблон отладки, называемый «инструмент», который вы используете в программе «Инструменты».) С помощью инструмента памяти вы можете отслеживать жизненный цикл объекта, а также отслеживать количество активных объектов в куче вашего приложения. Когда вы выбираете объект в списке текущих активных объектов, вы можете увидеть, где в вашей программе он был выделен и откуда берется код, который создает сильные ссылки. Однако объяснение того, как использовать инструменты, выходит за рамки поста SO. На эту тему есть различные учебные пособия и видеоролики с сессий WWDC. Предлагаю заняться поиском.
Что касается вашего вопроса, принудительное предупреждение о нехватке памяти не приведет к освобождению контроллера активного представления (тот, который находится на экране) и вызову метода deinit. Система поддерживает сильную ссылку на контроллер представления.
Кроме того, вы должны сделать ссылки на делегаты слабыми по умолчанию. Наличие сильной ссылки на делегата ОЧЕНЬ необычно. Я видел его только один или два раза, по определенным причинам.
person
Duncan C
schedule
21.12.2015