Un NSDictionary non libéré

03:43 modifié dans API AppKit #1
Bonjour à  tous,

Je vous présente un nouveau problème :

<br />- (void)awakeFromNib<br />{<br />	NSDictionary* library;<br />	<br />	library = [[NSDictionary alloc] initWithContentsOfFile:[NSHomeDirectory() stringByAppendingPathComponent:@&quot;Music/iTunes/iTunes Music Library.xml&quot;]];<br />	<br />	[library release];	<br />	<br />}<br />


OU

<br />- (void)awakeFromNib<br />{<br />	NSDictionary* library;<br />	<br />	library = [NSDictionary dictionaryWithContentsOfFile:[NSHomeDirectory() stringByAppendingPathComponent:@&quot;Music/iTunes/iTunes Music Library.xml&quot;]];	<br />}<br />


Quoi que vous utilisiez, essayez donc ça (en remplaçant le chemin si jamais votre fichier XML ne se trouve pas là ).

Ouvrez le moniteur d'activité et voyez la RAM consommée. à‰trange, library est censé être relâché et pourtant...
Retirez le code .. hooo ça ne consomme plus que 6 Mo contre 6+tailleduXML tout à  l'heure :o

À n'y rien comprendre.
Je vous ai attaché le projet, qui, vous le remarquerez, est complètement vide de code... sauf le awake...


Je me suis amusé à  changer NSDictionary par NSString... et là , magie, la mémoire RAM consommée retombe bien de "tailleduxml" Mo..

J'espère vous poser une grande colle, parce que là  je pige rien ! :)

Réponses

  • avril 2009 modifié #2
    Muahhahaha j'ai encore mieux pour vous faire rire,

    rajoutez 4, 5, voir autant de [library release]; que vous souhaitez, l'appli bronchera pas  >:)

    Instruments indique pourtant le release du dictionary. on le voit facilement avec le graph.
  • psychoh13psychoh13 Mothership Developer Membre
    03:43 modifié #3
    Ce que t'indique Moniteur d'Activité c'est la mémoire attribuée à  ton application.

    En général, ton application va réclamer de la mémoire au système quand tu vas faire une allocation dynamique. Mais quand tu auras libéré la mémoire, ton application ne va pas forcément (même rarement) rendre la mémoire au système directement. Il va la garder à  lui car tu vas sûrement la réclamer pour d'autres allocations.
  • yoannyoann Membre
    03:43 modifié #4
    dans 1239573199:

    Ce que t'indique Moniteur d'Activité c'est la mémoire attribuée à  ton application.

    En général, ton application va réclamer de la mémoire au système quand tu vas faire une allocation dynamique. Mais quand tu auras libéré la mémoire, ton application ne va pas forcément (même rarement) rendre la mémoire au système directement. Il va la garder à  lui car tu vas sûrement la réclamer pour d'autres allocations.


    De ce qu'on a testé avec Louka, même avec plusieurs fichier chargé on a le même espace occupé en mémoire. Du coup je me demande, est-ce qu'il y a du cache ? ça parait logique vu le travail de traitement pour le chargement d'un plist en dico mais ce n'est pas précisé dans la doc.
  • psychoh13psychoh13 Mothership Developer Membre
    03:43 modifié #5
    Du cache pour contenir quoi ?
Connectez-vous ou Inscrivez-vous pour répondre.