2011-06-24 80 views
0

對不起,我非常不特定的標題,但我只是調試我的程序與泄漏和我找到了泄漏的代碼下面幾行:我漏了幾個字節 - 爲什麼?

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; // LEAKS shows 80% 
[dateFormat setDateFormat:@"EEE-dd-MMMM-yyyy"]; 
NSDate *today = [[NSDate alloc] init]; // LEAKS shows 20% 
NSString *theDate = [dateFormat stringFromDate:today]; 

[noteBookContent replaceObjectAtIndex:(currentPageCounter*3)+1 withObject:theDate]; 

[dateFormat release]; 
[today release]; 

LEAKS告訴我,一條線是80%泄漏,另外20%。但爲什麼?我正在釋放兩個...

它只有16個字節,所以我想我不應該擔心...或者我應該擔心這種東西嗎?無論如何,這讓我不知道爲什麼我的代碼泄漏,所以任何幫助將非常感激。謝謝!另外,雖然我們在談論LEAKS的話題 - 在我的程序中還有一些其他的Leaked Blocks,比如'Malloc 32 Bytes Foundation - [NSCFString appendString:]'... LEAKS不會給我任何對我的代碼的引用,這應該是泄漏。那我怎麼才能找出這個內存在哪裏泄漏呢?

對不起,如果這是所有基本的東西,但你可能會收集,這是我第一次使用LEAKS。

在此先感謝!

回答

2

如果您立即釋放對象並且沒有對它們執行更多操作,我會改變您的方法。使用auroreleased對象試試這個辦法:

NSString *theDate = [NSDateFormatter localizedStringFromDate:[NSDate date] 
                dateStyle:@"EEE-dd-MMMM-yyyy" 
                timeStyle:nil]; 
[noteBookContent replaceObjectAtIndex:(currentPageCounter*3)+1 
          withObject:theDate]; 

*注意,我沒有檢查的準確性或泄漏的代碼,但它應該做同樣的事情。

0

我猜你應該也發佈theDate也?

+0

我想這不是解決方案,因爲我沒有分配日期。如果我釋放它,應用程序崩潰。 –

+0

你是對的。唯一需要釋放對象內存的時間是當你用這些關鍵字初始化它時:NEW,ALLOC,RETAIN,COPY - 只記得「NARC」 – markrickert

1

嘗試使用自動釋放初始值設定項。例如,而不是使用

date = [[NSDate alloc] init]; 

使用

date = [NSDate date]; 

等等。

當我使用autoreleased初始值設定項時,我沒有收到泄漏消息。

相關問題