2010-11-19 176 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无关,所以我重申了你的问题。 – 2010-11-19 18:55:16

+0

哈哈,很好的电话,谢谢。 :) – gabaum10 2010-11-19 19:00:12

回答

15

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

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

打我吧! :) – 2010-11-19 18:58:13

+0

只是因为你有用地重新签署了这个问题。 :) – 2010-11-19 19:00:48

+0

它仍然看起来像是在某个时候被autoreleased。当我尝试致电[发布后];在我把所有东西都放好之后,当僵尸被调用时(我自己清楚地释放它之后)它崩溃了。 – gabaum10 2010-11-19 19:05:12