Table des matières:
Vidéo: TUTORIEL | COMMENT UTILISER L' APPLICATION FICHIERS SUR UN IPHONE | IPAD 2025
Aussi puissant soit-il, l'iPhone - et même l'iPad - dispose de ressources limitées, et la plus importante de ces ressources pour les applications iOS est la mémoire. vraiment comprendre comment gérer la mémoire correctement dans votre application, vous devez comprendre comment fonctionne la mémoire iOS
Gestion de la mémoire
Chaque fois que vous (ou un objet cadre) créez un objet en utilisant Objective-C, vous allouez de la mémoire pour Bien que les appareils iOS et le Mac utilisent tous ce que l'on appelle la mémoire virtuelle , contrairement au Mac, la mémoire virtuelle dans iOS est limitée à la quantité réelle de mémoire physique. le gestionnaire de mémoire libère les pages de mémoire qui contiennent du contenu en lecture seule (tel que du code).
De cette façon, tout ce qu'il a à faire est de charger les "originaux" Contrairement à ce que fait le Mac, iOS ne stocke pas temporairement de mémoire «modifiable» (telle que des données d'objet) sur le disque pour libérer de l'espace et en lire les données plus tard quand c'est nécessaire. Cet état de choses limite la quantité de mémoire disponible.
Comme vous pouvez le voir, lorsqu'un objet utilise la mémoire, il est essentiel que la mémoire soit libérée pour être utilisée par d'autres objets.
Si la mémoire continue à être limitée, le système peut également envoyer des notifications à l'application en cours d'exécution, lui demandant de libérer de la mémoire supplémentaire. C'est l'un des événements critiques auxquels toutes les applications doivent répondre.
En Objective-C, la mémoire est gérée dans les applications iOS par comptage de référence - en gardant le système à jour pour savoir si un objet est actuellement utilisé. Lire la suite pour tous les détails.
Référence comptant
En fait, la gestion de la mémoire est simplement un exercice de comptage. Chaque objet a son propre compte de référence, ou retain count, qui est le nombre d'autres objets qui utilisent actuellement l'objet. Tant que le nombre de rétention est supérieur à zéro, le gestionnaire de mémoire suppose que quelqu'un se soucie de cet objet et le laisse seul.
Lorsque le nombre de retenues d'un objet est nul, le gestionnaire de mémoire sait que personne n'en a plus besoin et envoie à l'objet un message de désallocation, et ensuite sa mémoire est renvoyée au système pour être réutilisée.
Ce processus semble assez simple, mais comment le compte de retenue est-il incrémenté et décrémenté? Jusqu'à Xcode 4. 2 et iOS 5. 0, vous deviez gérer le nombre de retenues dans votre application. Lorsqu'un objet est créé via alloc ou new ou via un message copy copy ou muteableCopy, le paramètre retain de l'objet est défini sur 1.
Lorsque votre application utilise l'une de ces méthodes, la propriété est transférée à l'objet qui a envoyé le message. est, l'objet a été conservé et cet objet qui a envoyé le message devient un propriétaire non exclusif de l'objet. Propriété signifie ici que l'objet sera là pour l'utiliser jusqu'à ce qu'il soit explicitement libéré en lui envoyant un message quand il n'est plus nécessaire.
Avant Xcode 4. 2 et iOS 5. 0, si vous n'avez pas créé d'objet par l'une de ces méthodes, mais que vous vouliez devenir propriétaire, assurez-vous que l'objet est resté à votre disposition jusqu'à ce que vous soyez fait avec, c'était à vous d'envoyer un message de retenue pour augmenter le nombre de retenue, et quand vous avez fini, d'envoyer un message de libération.
Cela était dû au fait que le créateur de l'objet (qui a fait que le compte de retenue était réglé sur 1) l'a libéré automatiquement - a envoyé à l'objet un message de libération qui le relâchera plus tard (généralement la prochaine fois est saisi).
Ceci est utile dans les cas où vous voulez renoncer à la propriété d'un objet mais évitez la possibilité qu'il soit désaffecté immédiatement (par exemple lorsque vous renvoyez un objet d'une méthode). Dans les deux cas, vous mainteniez un pointeur sur l'objet afin qu'il puisse être utilisé.
Bien que cette approche fût simple en théorie, c'était un vrai casse-tête pour les programmeurs. La grande majorité des pannes de système s'est produite parce que les applications manquaient de mémoire et étaient arrêtées par le système. Dans certains de ces cas, l'application n'a pas répondu aux méthodes d'avertissement de la mémoire et gère les avertissements de manque de mémoire.
Cependant, la plupart du temps, même si l'application répondait aux avertissements de faible mémoire, elle était limitée à ce qu'elle pouvait faire parce que la mémoire avait fui. La mémoire était réellement disponible car certains objets n'étaient pas utilisés, mais la mémoire de ces objets n'avait pas été restituée au système. Il n'y avait plus de pointeurs sur ces objets, donc ils ne pouvaient pas être libérés puis désalloués et la mémoire réutilisée.
Les développeurs ont plusieurs façons de gérer la mémoire automatiquement. L'un est garbage collection, qui balaye la mémoire et libère des objets qui n'ont aucun pointeur.
La récupération de place pour Objective-C était disponible sur Mac, mais la récupération de place a rencontré quelques problèmes. Il peut démarrer et mettre en veille vos applications au moment le plus inopportun, et cela affecte les performances et l'expérience de l'utilisateur, car vous n'avez aucun contrôle, ou aucune idée, quand cela se produira. Il n'a jamais été implémenté sur iOS et est obsolète depuis OS X 10. 8 (Mountain Lion).
Toute cette gestion de la mémoire dans votre application a été modifiée avec les dernières versions du compilateur Objective-C, désormais équipé du comptage automatique des références (ARC), activé par défaut à chaque fois que vous créer un projet ARC fait pour vous dans le compilateur ce que vous deviez faire par vous-même. Il gère toutes ces versions, autoreleases, et conserve pour vous.
