我漏了几个字节 - 为什么?

时间:2011-06-24 13:12:15

标签: iphone objective-c cocoa-touch memory-leaks

很抱歉这个非常不明确的标题,但我只是用LEAKS调试我的程序,我在以下几行代码中发现了泄漏:

    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的主题 - 我的程序中还有一些其他泄漏块,例如'Malloc 32 Bytes Foundation - [NSCFString appendString:]'...... LEAKS不给我任何引用我的代码,这应该是泄漏。我怎么知道这个记忆泄漏的地方呢?

很抱歉,如果这是基本的东西,但你可能会收集,这是我第一次使用LEAKS。

提前致谢!

3 个答案:

答案 0 :(得分:2)

如果您立即发布对象并且没有使用它们执行更多操作,我会更改您的方法。使用auroreleased对象尝试这种方法:

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

*请注意,我没有检查此代码的准确性或泄漏,但它应该完全相同。

答案 1 :(得分:1)

尝试使用自动释放的初始化程序。例如,而不是使用

date = [[NSDate alloc] init];

使用

date = [NSDate date];

等等。

当我使用自动释放的初始化程序时,我不会收到泄漏消息。

答案 2 :(得分:0)

我想你也应该发布theDate