2010-02-03 4 views
0

Je teste un cas d'utilisation particulier pour des fuites. Parfois, je reçois les fuites et d'autres fois je ne le fais même pas si je passe par le même cas. Pouvez-vous suggérer si c'est à cause des cadres du système ou de mon code?Fuites de mémoire intermittentes

J'ai vérifié mon code et tout semble parfait sans aucun objet inédit. Pouvez-vous proposer une solution?

Merci

+0

Sans votre code, nous ne pouvons rien vous proposer. – spender

Répondre

1

Il est extrêmement improbable d'être le cadre. N'oubliez pas qu'il y a des centaines (des milliers?) De développeurs qui l'utilisent, donc les chances que quelqu'un ne remarque pas un bogue là-bas sont plus minces que du code qui n'a été revu que par vous-même.

0

La source la plus probable d'une fuite de mémoire intermittente est constituée d'objets autorétrés. Les objets autoreleased traînent jusqu'à ce que le pool autorelease auquel ils appartiennent soit drainé. Selon les conditions de la mémoire, ils peuvent avoir l'air de fuir pendant une course, mais ils ne peuvent pas faire la prochaine course.

Voir Avoiding, finding and removing memory leaks in Cocoa pour savoir comment détecter les fuites de mémoire.

Edit01:

Vous pourriez sortir avec elle, mais je ne le recommanderais pas. Si cela fuit pendant qu'Apple le teste, vous avez de bonnes chances d'être rejeté.

En tant que problème de qualité, cela dépend de la gravité des fuites et de leur durée de vie en utilisation réelle. Chaque application laisse probablement passer quelques octets ici et là. (Par exemple, il existe des fuites connues dans certains cadres.) Si les fuites sont très petites, elles ne causeront pas de problèmes, surtout sur une application qui ne fonctionne que pendant une courte période. Cependant, si les fuites sont plus importantes ou si l'application est conçue pour fonctionner longtemps, les fuites finissent par entraîner la baisse de l'application. Par exemple, supposons que vous ayez un programme tel que l'application Météo. Par exemple, supposons que vous ayez un programme comme l'application Météo. En tant que problème de qualité, cela n'a pas vraiment d'importance si cela fuit un peu parce que l'application météo est utilisée rapidement. Les gens l'ouvrent, regardent la météo et la ferment. Les fuites n'ont pas le temps de s'accumuler. D'un autre côté, si vous aviez une application comme un navigateur Web ou un eReader que les gens laissent ouvertes pendant de longues périodes, les fuites pourraient s'accumuler et entraîner l'application. En bref, comme toutes les autres tâches de programmation, la détection des fuites est un compromis entre la qualité perçue et le développement. Il est très fréquent de dépenser plus de ressources pour traquer un bug banal mais commun que de traquer un problème sérieux mais très rare.

Je voudrais réitérer que les méthodes de détection de fuite de mémoire dans la fuite ci-dessus localiseront finalement la fuite. Si vous y passez du temps, vous finirez par le trouver.

+0

alors est-ce ok si je soumets à apple avec ce genre de fuites – Gani

+0

voir modifier pour une réponse détaillée – TechZen