Pourquoi Clang se plaint-il de tous mes objets autoreleased?
-
20-08-2019 - |
Question
J'ai la fonction suivante:
- (NSString *)urlEncodedValue {
NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(
kCFAllocatorDefault,
(CFStringRef)self,
NULL,
CFSTR("?=&+/\r\n"),
kCFStringEncodingUTF8
);
return [result autorelease];
}
Pourquoi Clang me donne-t-il les plaintes suivantes?
- 1 L'appel à la fonction 'CFURLCreateStringByAddingPercentEscapes' renvoie un objet Core Foundation avec un nombre de conservations de +1 (propriété propre)
- 2 objet envoyé - message de libération automatique
- 3 Objet renvoyé à l'appelant en tant que référence propriétaire (le nombre de retenues individuelles transféré à l'appelant)
- 4 Objet over-autoreleased: l'objet a été envoyé -autorelease mais l'objet a zéro (visible localement) rétablit les comptes
À ma connaissance, cela est conforme aux directives d'Apple concernant la gestion de la mémoire et la propriété des objets. Dois-je libérer explicitement l'objet? Cette erreur a été soulevée 19 fois dans mon projet, toutes dans des circonstances similaires. Qu'est-ce que je fais mal?
La solution
J'ai trouvé la réponse à ma propre question, en la publiant ici si quelqu'un d'autre tombe sur le sujet. J'utilisais checker-0.198, checker-0.204 ne signale aucun problème de ce type. Il semble que ce soit une régression temporaire.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow