NSDate内存泄漏

时间:2013-07-05 16:16:38

标签: xcode memory-leaks nsdate

我在其他论坛中搜索过这个问题的答案,但无论我怎么做,它似乎都没有摆脱我的内存泄漏。有人有什么建议吗?

每次呈现时,我的ViewController中每个NSDate都会出现16个字节的内存泄漏。

-(void)initialise:(id)sender withDate:(NSDate *)date withMinimumDate:(NSDate *)minimum {
    delegate = sender;
    self.originalDate = [[NSDate alloc] init];
    self.originalDate = date;

    self.minimumDate = [[NSDate alloc] init];
    self.minimumDate = minimum;
}

- (void)dealloc {
    [self.originalDate release];
    [self.minimumDate release];

    [super dealloc];
}

我尝试在第一次分配它们之前释放和/或使NSDates为零,并在dealloc方法中将它们设置为nil。

它们在Header中被声明为非原子和保留属性。

我错过了一些基本的东西,还是有更复杂的答案?

2 个答案:

答案 0 :(得分:2)

您正在为alloc执行init / NSDate originalDate,但随后立即放弃并将其设置为date参数,可能泄漏您创建的NSDate。你也是用minimumDate做的。

至少应删除那两条alloc / init个对象的NSDate / initialise行,这些对象随后放弃以支持{{1}的参数方法。


顺便说一句,如果您使用静态分析器(“产品”菜单上的“分析”或按 shift ,则会突出显示此问题(以及dealloc问题) + 命令 + ):

static analyzer

编写手动引用计数代码时,静态分析器对于识别问题非常有用。你真的应该从分析仪上获得一份干净的健康状况。您可以单击蓝色图标,它通常会随着我在上面的屏幕快照中显示的描述和箭头进行扩展。

请注意,这也突出显示self.originalDate方法中_originalDate(而不是dealloc,或任何后备实例变量)的不当使用。正如我在之前的评论中提到的那样,你should not use accessor methods in dealloc method

答案 1 :(得分:0)

这两行正在创建对永不释放的对象的引用。

self.originalDate = [[NSDate alloc] init];

self.minimumDate = [[NSDate alloc] init];

看到你立即用新值覆盖这些属性,你只需要删除这两行(它们冗余地分配从未使用过的NSDate个对象),你的泄漏就会消失。

您还应检查委托是否也是正确的内存管理,因为我在dealloc中看不到委托变量的释放。