2011-06-09 81 views
0

我有一個莫名其妙的泄漏。 LEAKS告訴我下面指出的線路正在泄漏。 我是釋義,但忠實。它從文件中提取NSDictionary,然後將其發送到另一個進程。
據我所知,所有這些對象的內存都應該由OS管理。從NSDictionary泄漏

我不知道LEAKS是如何工作的,但我猜測它標誌着操作系統想要釋放「statusdict」的地步,但不能,因爲它內部沒有任何東西。但是這裏沒有任何東西沒有被這裏顯示的過程獲得。


NSDictionary *statusdict = [self readStatus]; 

[self runProcess:[statusdict objectForKey:@"objectname"]]; <- it leaks here 


-(NSDictionary*) readStatus { 

    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

    NSString *status = [[docPath stringByAppendingPathComponent:@"status.plist"] retain]; 

    cstat = [NSDictionary dictionaryWithContentsOfFile:status]; 

    [status release]; 


    return (cstat); 

} 
+0

包含了'runProcess'方法。 – 2011-06-09 04:00:39

+0

Deepak得到的是如果runProcess保留字典並且從不自動釋放或釋放它,那麼這就是泄漏。 – darvids0n 2011-06-09 04:04:48

+0

啊。這一定是它。 runProcess方法將字符串(只是字符串,而不是整個字典)傳遞給另一個永久保留的字符串。所以這行只是self.keepME = passedValue。 – adamD 2011-06-09 15:38:08

回答

0

甲泄漏當對象被保持超過它的釋放發生。系統不會自動釋放任何東西。你要麼手動釋放它,要麼自動釋放它。

我不能告訴你的泄漏來自這段代碼,儘管我的猜測是runProcess方法。

但找到這個泄漏並不能解決您的問題。您需要了解iOS內存管理。

從這裏開始: