2010-03-17 2 views
0

J'ai créé une méthode de catégorie NSScanner qui indique une fuite dans les instruments. Je pense que c'est la façon dont je passe la valeur de/à la méthode, mais je ne suis pas sûre. C'est une petite fuite (32 octets), mais j'aimerais bien le faire si je le peux. Merci d'avance.Fuite dans la méthode de la catégorie NSScanner

+0

Comment avez-vous appelé cette méthode? Comment avez-vous préparé '(NSString **) value' quand vous l'avez appelé? – Yuji

+0

Yuji, merci pour la réponse. Je ne peux pas mettre en forme de code dans le commentaire, alors regardez ma réponse ci-dessous. – jluckyiv

Répondre

2

J'ai trouvé la réponse. J'ai eu une classe de modèle qui a utilisé le résultat du code ci-dessus, mais j'ai oublié de libérer la propriété dans la méthode dealloc. J'aurais dû l'attraper avec des instruments, mais je ne savais pas où regarder. Je me suis retrouvé dans la pile d'appels dans les détails étendus, qui ne contenaient qu'une partie de l'information dont j'avais besoin.

Pour des crétins comme moi, voici ce que je faisais:

  1. Exécutez votre application avec des instruments ... Fuites.
  2. Dans Instruments, observez la vue des blocs qui fuient (l'icône de la grille en bas) et activez les détails étendus.
  3. Si vous avez plusieurs objets qui ont fui, cliquez sur le triangle d'affichage afin de pouvoir regarder une adresse discrète.
  4. À côté d'une adresse, il y aura une flèche de détail. Clique dessus.
  5. Vous allez maintenant regarder l'histoire. Il commence par Malloc et vous montre chacun conserver et libérer.

Vous devriez avoir une version pour le malloc et une version pour chaque conservation dans l'histoire. Faites correspondre vos retenues et communiqués et recherchez l'oddball. En cas de doute, regardez vers le bas de la page et examinez attentivement les propriétés que vous avez oublié de publier dans votre/vos méthode (s) dealloc.

+0

+1 Une bonne description de la façon d'utiliser les fuites pour les débutants. –

0

OK, je suis stupide. Cette méthode ne fuit pas. La fuite est plus loin dans ma pile d'appels, mais je ne peux pas savoir où. Désolé pour le message prématuré. Je ferai un suivi lorsque je découvrirai où se trouve la vraie fuite, si je ne peux pas résoudre le problème moi-même.

En réponse au commentaire de Yuji, mon appel de méthode est:


    NSString *title; 
    [fileScanner scanBetweenPrefix:kTitlePrefix 
         andSuffix:kTitleSuffix 
         intoString:&title]; 

Est-ce le titre & qui est le problème? Je l'ai modelé après les méthodes et les appels NSScanner existants.

+0

Étant donné que la mémoire qui fuit a été allouée, l'explication la plus probable est que, même si vous utilisez le titre après ce code, vous fuyez cette chaîne. – smorgan

+0

jluckyiv: Je ne vois rien de mal dans la méthode de la catégorie ou dans son utilisation. Regardez l'historique de l'adresse de l'objet 'title' dans Instruments pour voir ce qui l'a retenu et n'a pas réussi à le libérer. –

+0

Peter, merci pour le conseil. Je trouve toujours mon chemin autour des instruments. – jluckyiv

Questions connexes