Gestion de la mémoire: ARC vs MRC sous iOS

Comment fonctionne le compteur de référence automatique sous iOS? En fait, ce sujet a été plus facile à comprendre pour moi une fois que je me suis familiarisé avec le compteur de référence manuel. Cet article est trÚs simple pour vous aider à comprendre le fonctionnement de la gestion de la mémoire sous iOS.





Il existe plusieurs outils de gestion de la mémoire sous iOS:





MRC - Compteur de référence manuel

MRC est une gestion manuelle des liens par code. Dans les premiers temps et Ă  l'Ă©poque prĂ©historique, les dĂ©veloppeurs gĂ©raient eux-mĂȘmes le comptage de rĂ©fĂ©rences par Ă©quipes. C'Ă©tait, pour le dire lĂ©gĂšrement, difficile:





  • alloc - crĂ©ation d'un objet (crĂ©ation d'un lien)





  • retenir - rĂ©fĂ©rence Ă  celui-ci (+1 au lien)





  • release - dĂ©crĂ©mente le nombre de rĂ©fĂ©rences (-1)





  • dealloc - si le nombre de rĂ©fĂ©rences est 0 = dĂ©chargement de la mĂ©moire





Fondamentalement, vous allouez un objet, vous l'enregistrez à un moment donné, puis vous envoyez une version pour chaque allocation / sauvegarde que vous envoyez. La méthode dealloc est appelée sur un objet lorsqu'il est supprimé de la mémoire.





ProblĂšmes:





  • Vous devez constamment compter retenir, libĂ©rer





  • crash lors de l'accĂšs Ă  partir de la mĂ©moire dĂ©chargĂ©e





  • oubliĂ© de mettre la version - fuite de mĂ©moire





ARC - Compteur de référence automatique

, , , - iOS . . ARC . . , ARC , .









?





  • (release/retain - ) dealloc -





  • properties change - weak/strong









property :





  • strong - retain





  • weak - assign.





, ARC:





  • Le cycle de conservation se produit lorsque la quantitĂ© d'espace allouĂ© en mĂ©moire ne peut pas ĂȘtre rĂ©cupĂ©rĂ©e en raison de cycles de sauvegarde. Étant donnĂ© que Swift utilise le comptage automatique des rĂ©fĂ©rences (ARC), une boucle d'enregistrement se produit lorsque deux ou plusieurs objets contiennent des rĂ©fĂ©rences fortes les uns aux autres. En consĂ©quence, ces objets se conservent en mĂ©moire, car leur nombre de sauvegardes ne diminuera jamais Ă  0, ce qui empĂȘchera la fonction deinit d'ĂȘtre appelĂ©e et de libĂ©rer de la mĂ©moire.





La solution est triviale: rendre l'un des liens faible.









Cet article est plus basique et introductif aux bases de la gestion de la mémoire dans iOS, pour une compréhension conceptuelle facile.








All Articles