2010-11-19 15 views
4

Wirklich schnelle Frage, die mich INSANE fährt. Ich habe mich gefragt, ob mir jemand sagen könnte, warum diese Linie undicht ist?iPhone Speicherlecks?

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

Ich bin nur eine Zeichenfolge in ein URL-Format zu kodieren. Nach meinem Verständnis sollte stringWithFormat: ein automatisch freigegebenes Objekt zurückgeben. Anscheinend ist das nicht der Fall. Es funktioniert, aber Lecks. Irgendwelche Ideen??

+0

FYI, das hat nichts mit Xcode zu tun, also habe ich Ihre Frage neu geschrieben. –

+0

Haha, guten Ruf, danke. :) – gabaum10

Antwort

15

Sie verwenden die Methode CFURLCreateStringByAddingPercentEscapes. Wenn eine Core Foundation-Funktion in ihrem Namen "Create" aufweist, bedeutet dies, dass Sie das zurückgegebene Objekt besitzen. Mit anderen Worten, Sie müssen die von CFURLCreateStringByAddingPercentEscapes zurückgegebene CFStringRef freigeben.

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

Beat mich dazu! :) –

+0

Nur weil Sie die Frage hilfreich retagging. :) –

+0

Es sieht immer noch so aus, als würde es zu einem bestimmten Zeitpunkt automatisch freigegeben werden. Wenn ich versuche [nach der Veröffentlichung] anzurufen; nachdem ich alles eingerichtet habe, stürzt es ab, wenn ein Zombie gerufen wird (nachdem ich es selbst klargestellt habe). – gabaum10