recherche

Maison  >  Questions et réponses  >  le corps du texte

objective-c - Un problème de libération de mémoire sous ARC dans le développement iOS

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.

曾经蜡笔没有小新曾经蜡笔没有小新2729 Il y a quelques jours1321

répondre à tous(2)je répondrai

  • 世界只因有你

    世界只因有你2017-07-03 11:45:05

    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 :

    1

    2

    3

    4

    5

    <code>#pragma mark - dealloc

     

    -(void)dealloc {

        NSLog(@"dealloc %@", NSStringFromClass([self class]));

    }</code>

    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)

    répondre
    0
  • 巴扎黑

    巴扎黑2017-07-03 11:45:05

    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.

    répondre
    0
  • Annulerrépondre