2010-11-19 4 views
4

Действительно быстрый вопрос, который заводит меня INSANE. Мне было интересно, может ли кто-нибудь сказать мне, почему эта линия протекает?Утечка памяти iPhone?

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

Я просто кодирую строку в формате URL. По моему мнению, stringWithFormat: должен вернуть объект с автореализацией. По-видимому, это не так. Он работает, но протекает. Есть идеи??

+0

FYI, это не имеет ничего общего с Xcode, так что я повторил ваш вопрос. –

+0

Ха-ха, хороший звонок, спасибо. :) – gabaum10

ответ

15

Вы используете способ CFURLCreateStringByAddingPercentEscapes. Если функция Core Foundation имеет «Create» в своем имени, это означает, что вы являетесь владельцем возвращаемого объекта. Другими словами, вам нужно будет освободить CFStringRef, возвращенный CFURLCreateStringByAddingPercentEscapes.

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

Убей меня! :) –

+0

Только потому, что вы помогли решить вопрос. :) –

+0

Он по-прежнему выглядит как автореализованный в какой-то момент. Когда я пытаюсь вызвать [post release]; после того, как я все установил, он падает, когда зомби зовут (после того, как я ясно его выпустил). – gabaum10

Смежные вопросы