objective-c - Un problème de libération de mémoire sous ARC dans le développement iOS
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-07-03 11:43:05
0
2
1300

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.

曾经蜡笔没有小新
曾经蜡笔没有小新

répondre à tous(2)
世界只因有你

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 :

#pragma mark - dealloc

-(void)dealloc {
    NSLog(@"dealloc %@", NSStringFromClass([self class]));
}

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)

巴扎黑
  1. 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.

  2. Utilisez analyser pour analyser la mémoire de l'application

  3. Si vous utilisez Xcode version 8.0 ou supérieure, vous pouvez afficher la carte mémoire.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal