Saber onde estão os ciclos de retenção e removê-los

Fiquei me perguntando se havia uma maneira fácil (ou pelo menos uma maneira) de descobrir onde existem ciclos de retenção no seu programa. Além disso, se eu souber onde esses ciclos de retenção existem, dependendo de seus tipos (por exemplo, variável ou fechamento), como faço para torná-los fracos. Preciso interromper todos os ciclos de retenção consigo mesmo (meu GameScene), para que ele se desaloque quando não precisar mais dele e desejar reiniciá-lo.

Todas as dicas, conselhos, respostas e comentários serão muito bem-vindos (e preferimos fornecer códigos e exemplos específicos). Obrigado.

Editar: A resposta de @ Sweeper foi exatamente o que eu estava procurando. Se você está tendo o mesmo problema, a resposta dele ajudará. Obrigado @Sweeper!

questionAnswers(1)

yourAnswerToTheQuestion