2010-05-26 4 views
1

J'ai un modèle à base de navigation, lorsque je lance mon application à l'aide instruments, la première fuite de mémoire vient sous:fuite de mémoire lors de l'application des charges dans l'iPhone

Leak Object: Malloc 128 bytes 
Responsible Library: CoreGraphics 
Responsible Frame: open_handle_to_dylib_path 

Je ne sais pas où cette fuite est à venir de et comment supprimer cela.

S'il s'agit d'une fuite par défaut, alors je pense que je n'ai pas besoin de m'inquiéter à ce sujet. Mais si ce n'est pas le cas, je dois trouver un moyen d'éliminer la fuite.

+2

Si vous avez des pommes de terre, vous pouvez faire de la soupe de pommes de terre et poireaux. –

Répondre

2

Développant deanWombourne parfaitement bonne réponse un peu .. L'instrument Leaks vous montre la mémoire qui ne va pas être libérée dans le cours normal de l'application (car il n'y a aucune référence à celle-ci). Ce n'est en soi pas un gros problème, il sera gratuit lorsque l'application sortira. Une grande partie du code cadre allouera et laissera ces très petits morceaux de mémoire alloués. Je n'ai aucune idée si elles sont des erreurs ou essentielles à la façon dont l'application fonctionne. Quoi qu'il en soit, nous devons accepter qu'ils sont complètement normaux. Les fuites vont identifier ces morceaux de mémoire comme des «fuites» et cela semble mauvais, mais ce n'est pas vraiment les «fuites» que l'instrument est là pour vous aider à identifier. Les 'vraies' fuites sont dans le code qui peut être exécuté plusieurs fois et qui allouent de la mémoire qui n'est jamais libérée, donc au fil du temps consommera de plus en plus de mémoire jusqu'à ce que toute la mémoire soit utilisée et votre application plante. Par conséquent, si vous avez une application, quelle que soit la durée d'utilisation, peu importe la façon dont vous l'utilisez, elle «fuit» 128 octets dans un environnement Apple, vous n'avez généralement pas à vous en soucier. Cependant, si vous avez une application qui dit, chaque fois que vous cliquez sur un bouton, elle alloue une nouvelle chaîne qui n'est jamais libérée - peu importe combien d'octets la chaîne est - si l'utilisateur a appuyé sur le bouton assez longtemps toute la mémoire disponible pour app et finalement l'écraser. C'est le genre de fuite que vous devez surveiller.

L'instrument de fuite ne peut pas faire la différence entre les deux types, mais vous devez être capable de le faire. Vous pourriez vouloir un type d'objet singleton, par exemple, qu'il n'y ait qu'une seule instance de, et qui doit exister pour toute la durée de vie de votre application. Vous créez l'objet au démarrage de l'application et, de façon réaliste, vous n'avez jamais besoin de libérer cet objet, il peut être tué lorsque l'application se termine. Les fuites vont l'identifier comme une fuite, et d'autres développeurs avec lesquels vous travaillez, qui supposent que cela signifie que vous ne savez pas ce que vous faites, courront vers votre patron comme un petit enfant et diront "Il écrit du code qui fuit vraiment, et c'est vraiment mauvais ". Et votre patron, qui n'est pas un programmeur, le prendra au sérieux parce que ça sonne mal et de toute façon il a gratté un CS de 2.2 d'une université de bonne réputation donc il doit savoir de quoi il parle. Quand vraiment c'est complètement raisonnable et exactement ce que vous vouliez faire. Donc, utilisez l'instrument Leaks pour trouver des bogues dans votre code qui ruineront votre application. Ne vous inquiétez pas de chaque octet trouvé «fuite» dans un cadre d'Apple.

0

Si c'est un arrêt 128 de fuite d'octets alors ne vous inquiétez pas du tout, il y a de meilleures façons de passer votre temps que de penser à ce :)

+0

"Merci beaucoup pour votre RÉPONSE" – iPhoneDev