2009-05-10 4 views
3

je la fonction suivante:Pourquoi Clang se plaint-il de tous mes objets auto-libérés?

- (NSString *)urlEncodedValue { 
NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(
        kCFAllocatorDefault, 
        (CFStringRef)self, 
        NULL, 
        CFSTR("?=&+/\r\n"), 
        kCFStringEncodingUTF8 
); 

return [result autorelease]; 

} 

Pourquoi Clang me donne les plaintes suivantes?

  • 1 appel à la fonction '' CFURLCreateStringByAddingPercentEscapes retourne un objet Core Foundation avec un +1 conserver count (référence posséder)
  • 2 Objet envoyé des messages -autorelease
  • 3 Objet retourné à l'appelant comme référence posséder (seul conserver le nombre transféré à l'appelant)
  • 4 objets sur-autoreleased: objet a été envoyé -autorelease mais l'objet a zéro (localement visible) conservent compte

pour la Au mieux de mes connaissances, ceci est conforme aux directives d'Apple en matière de gestion de la mémoire et de propriété des objets. Dois-je explicitement libérer l'objet? Cette erreur est survenue 19 fois dans mon projet, le tout dans des circonstances similaires. Qu'est-ce que je fais mal?

+0

Bonne question ... J'ai le même problème, et je ne comprends pas non plus ce qui ne va pas. Peut-être que c'est un bug en clang ... –

+0

Peut-être, mais je trouverais ça difficile à croire car les objets auto-libérés ne sont pas vraiment obscurs. Cela arrive aussi quand j'inscris la autorelease avec + alloc et -init. –

Répondre

3

J'ai trouvé la réponse à ma propre question, l'affichant ici si quelqu'un d'autre trébuche sur le problème. J'utilisais checker-0.198, checker-0.204 signale pas un tel problème. On dirait que c'était une régression temporaire.

Questions connexes