客观的c泄漏NSNumber被保留

时间:2011-06-02 03:22:23

标签: objective-c memory memory-leaks retain nsnumber

我的应用程序使用GPS并在每次更新GPS时分配一个NSNumber实例变量,在我发布之前的最后一点测试中,我发现它泄漏了很多。我很确定我知道哪些线路会导致泄漏,但我无法弄清楚如何解决它。

latitude = [[NSNumber numberWithFloat:[[coordinates objectAtIndex:0] floatValue]] retain];

此行是我的GPS更新方法,并定期运行。 Latitude是一个实例变量,当我删除retain时,我无法再访问我需要的其他方法中的变量。我在dealloc方法中释放了变量,但似乎没有做任何事情。

我理解alloc-release范例,但我仍然不确定如何解决这个问题。

2 个答案:

答案 0 :(得分:4)

在设置之前,您必须释放先前保留的值。否则,当您分配新指针时,释放的上一个对象没有引用它,并且永远不会释放它。

要轻松完成此操作,建议您将其设为@property并使用self.latitude = [NSNumber numberWithFloat:[[coordinates objectAtIndex:0] floatValue]];。请注意,保留不再用于分配。这假设您的属性设置了retain标记,并为您保留。

@property (nonatomic, retain) NSNumber *latitude

答案 1 :(得分:0)

如果没有看到你的其余代码,很难确切地说明你应该如何解决这个问题,但是一个好的第一种方法可能是尝试自动释放它:

latitude = [[NSNumber numberWithFloat:[[coordinates objectAtIndex:0] floatValue]] autorelease];

要考虑的另一件事是将纬度设为@property并将其设置为保留。这样,当您设置它时,它将释放先前的值。再一次,在不知道你如何使用纬度的情况下,很难指出你的方向。