2011-06-24 39 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初始值设定项时,我没有收到泄漏消息。

相关问题