2010-11-19 2 views
4

Question vraiment rapide qui me pousse INSANE. Je me demandais si quelqu'un pouvait me dire pourquoi cette ligne fuit?Fuite de mémoire de l'iPhone?

NSString *post = [NSString stringWithFormat:@"<someXML><tagWithVar=%@></tagWithVar></someXML>",var]; 
post = [NSString stringWithFormat:@"xmlValue=%@",(NSString *)CFURLCreateStringByAddingPercentEscapes(
                       NULL, 
                       (CFStringRef)post, 
                       NULL, 
                       (CFStringRef)@"!*'();:@&=+$,/?%#[]", 
                       kCFStringEncodingUTF8)]; 

Je ne fais que coder une chaîne dans un format d'URL. À ma connaissance, stringWithFormat: devrait renvoyer un objet autoreleased. Apparemment, ce n'est pas le cas. Cela fonctionne, mais fuit. Des idées??

+0

FYI, cela n'a rien à voir avec Xcode, j'ai donc repensé votre question. –

+0

Haha, bon appel, merci. :) – gabaum10

Répondre

15

Vous utilisez la méthode CFURLCreateStringByAddingPercentEscapes. Si une fonction Core Foundation a "Create" dans son nom, cela signifie que vous possédez l'objet retourné. En d'autres termes, vous devrez libérer le CFStringRef renvoyé par CFURLCreateStringByAddingPercentEscapes.

NSString *post = [NSString stringWithFormat:@"...", var]; 
CFStringRef stringRef = CFURLCreateStringByAddingPercentEscapes(...); 
post = [NSString stringWithFormat:@"xmlValue=%@",(NSString *)stringRef]; 
CFRelease(stringRef); 
+4

Battez-moi! :) –

+0

Seulement parce que vous étiez utile de republier la question. :) –

+0

Il semble toujours qu'il est auto-libéré à un moment donné. Quand j'essaie d'appeler [post-release]; après avoir tout mis en place, il se bloque quand un zombie est appelé (après que je l'ai clairement libéré moi-même). – gabaum10