2010-11-19 175 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