iPhone内存漏水?

时间:2010-11-19 18:52:01

标签: iphone objective-c ipad ios

非常快速的问题让我开始了INSANE。我想知道是否有人能告诉我为什么这条线路正在泄漏?

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

我只是将字符串编码为URL格式。根据我的理解,stringWithFormat:应该返回一个自动释放的对象。显然事实并非如此。它有效,但泄漏。任何想法??

1 个答案:

答案 0 :(得分:15)

您正在使用方法CFURLCreateStringByAddingPercentEscapes。如果Core Foundation函数的名称中包含“Create”,则表示您拥有返回的对象。换句话说,您需要释放CFStringRef返回的CFURLCreateStringByAddingPercentEscapes

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