Cliquez sur le bouton de la page 1 pour passer à la page 2. A ce moment, la mémoire augmente de 5 Mo. Cliquez ensuite sur le bouton de la page 2 pour fermer la page 2. A ce moment, la méthode dealloc de la page 2 est exécutée, mais. la mémoire de 5 Mo n'est pas libérée. Pourquoi?
La mémoire sous ARC n'est-elle pas libérée à temps ?
Comment devrions-nous juger si un contrôleur de vue ou un objet est réellement libéré ?
Remarque : j'ai vérifié l'utilisation de la mémoire via la session de débogage de Xcode.
Ajoutez le code suivant à la classe et jugez de l'état de publication de cette classe en regardant s'il existe un journal de la classe lorsqu'elle est supprimée :
Par exemple, le journal du nom de la classe
MyViewController
, 如果释放成功的话会有dealloc MyViewController
.Ensuite, déboguez à nouveau pour découvrir la cause.
Situation possible :
Quelque part
strong
cette classe est référencée在
block
中直接使用self
(应该使用__weak typeof(self) weakSelf = self
,然后在block中使用weakSelf
)Le contrôleur réécrit la méthode
-(void)dealloc
, vérifiez si la méthode est appelée lorsque le contrôleur rejette ou apparaît.Utilisez analyser pour analyser la mémoire de l'application
Si vous utilisez Xcode version 8.0 ou supérieure, vous pouvez afficher la carte mémoire.