2010-08-18 16 views
0

C'est une question assez étrange je suppose, mais je n'ai jamais vraiment eu à faire face à l'allocation de mémoire avant maintenant je suis vraiment paranoïaque à propos de l'utilisation de trop ou oublier de libérer des choses. J'ai trouvé l'outil de fuite de mémoire extrêmement utile (et je suis assez fier de voir que, du moins, je ne perds rien) et aussi l'outil Allocations que je suppose pour mesurer la quantité de mémoire utilisée à n'importe quel point d'exécution de l'application. Cependant, je ne sais pas vraiment combien de mémoire I devrait utiliser.iPhone: Quelle est l'utilisation de la mémoire est trop?

Je pense qu'il y a un bon 256M dans mon iPod touch, pas très sûr, mais je ne sais pas combien de cela est pris par les processus du système, ni vraiment combien je peux utiliser en toute sécurité avant de commencer à courir dans faible problèmes de mémoire. En ce moment, mon programme prend environ 4 Mo, ce qui semble assez élevé pour ce qu'il est en train de faire, mais je pense qu'il y a des processus système qui ne peuvent pas être arrêtés, ou des tâches de maintenance comme la grande toile de fond graphique. en utilisant. En bref, quelqu'un peut-il me donner un bon chiffre de référence que mes applications devraient viser en termes de la quantité maximale de mémoire utilisée à un moment donné? Les chiffres pour iPhone 4 et iPad seraient bien aussi, si ceux-ci diffèrent de manière significative.

-Ash

+0

duplication possible de [Mémoire utilise limite sur iPhone] (http://stackoverflow.com/questions/3448583/memory-uses-limit-on-iphone) –

+0

Ceci est une question assez fréquente, comme vous pouvez l'imaginer. La dernière fois qu'il est venu, j'ai donné mes deux cents. C'est ici: http://stackoverflow.com/questions/3448583/memory-uses-limit-on-iphone/3449344#3449344 –

Répondre

0

Pour les 2 derniers jours, j'analyse l'empreinte mémoire de ma dernière application et j'ai découvert un fait intéressant:

Lorsque l'application reçoit un avertissement de mémoire, il désalloue des vues qui ne sont pas actuellement visible. Cela provoque le crash de mon application, car je n'en ai pas tenu compte. Au départ, je pensais qu'il s'agissait de désallouer des objets qui avaient été auto-libérés, mais ce n'est pas correct.

Si je redémarrer mon téléphone, il peut gérer jusqu'à 8 Mo dans le tas sans aucun avertissement. Je suppose que dans iOS4, cela dépend de la quantité de choses que vous exécutez en arrière-plan. J'ai iOS 4.0.1 sur iPhone4.

iPad/iPhone 3GS ont 256mb, iPhone4 a 512mb, mais cela ne signifie pas que tout est disponible pour un processus. Je me souviens qu'au début iOS 3.0 une de mes applications a été terminée par OS à 32mb.

+4

Ce ne sont pas des objets auto-libérés en cours de désallocation.Les objets libérés sont libérés lorsque leur pool de libération automatique est libéré ou drainé. Le bassin principal est drainé à la fin de la boucle d'exécution en cours, et non en réponse aux avertissements de la mémoire. Ce que vous voyez est probablement le désallocation des vues qui ne sont plus à l'écran (une réponse UIViewController standard dans la méthode didReceiveMemoryWarning). En outre, si vous utilisez l'instrument Memory Monitor, vous verrez que la taille réelle de votre application est beaucoup plus grande que les 4,5 Mo d'allocations que vous décrivez. –

+0

@Brad Vous avez absolument raison. Il libère des vues. – bioffe

1

Il n'y a pas de réponse difficile. Il y a quelques choses à noter:

1) Si votre application utilise de plus en plus de mémoire au fil du temps, elle sera détruite beaucoup plus tôt qu'une application qui libère la mémoire correctement la plupart du temps, mais fait quelques erreurs. N'oubliez pas qu'il existe un processus de surveillance qui a une formule (apparemment) complexe pour tuer des applications, et que différentes applications peuvent être détruites à différents niveaux d'utilisation de la mémoire pour différentes raisons.

2) L'iPhone4 a beaucoup plus de mémoire que les téléphones précédents MAIS avec les utilisateurs multitâche, il est vraiment impoli de simplement aller en ville avec l'utilisation de la mémoire. Avec le multitâche ici, il est plus important que tout pour garder votre empreinte mémoire faible (et cela aide lorsque votre propre application est en arrière-plan, plus la mémoire est utilisée, plus il est probable qu'elle soit tuée).

3) Traitez sérieusement les avertissements de mémoire et jetez TOUT ce que vous pouvez. Cela permettra à votre application de fonctionner plus longtemps et de l'aider à rester en arrière-plan plus longtemps.