Objective c 目标c:保留编号
我的应用程序使用GPS并在每次GPS更新时分配一个NSNumber实例变量,在发布前的最后一次测试中,我发现它泄漏了很多。我相当确定我知道哪些管线导致泄漏,但我不知道如何解决它Objective c 目标c:保留编号,objective-c,memory,memory-leaks,retain,nsnumber,Objective C,Memory,Memory Leaks,Retain,Nsnumber,我的应用程序使用GPS并在每次GPS更新时分配一个NSNumber实例变量,在发布前的最后一次测试中,我发现它泄漏了很多。我相当确定我知道哪些管线导致泄漏,但我不知道如何解决它 latitude = [[NSNumber numberWithFloat:[[coordinates objectAtIndex:0] floatValue]] retain]; 这条线是我的GPS更新方法,并定期运行。Latitude是一个实例变量,当我删除retain时,我就不能再使用我需要的其他方法访问该变量了
latitude = [[NSNumber numberWithFloat:[[coordinates objectAtIndex:0] floatValue]] retain];
这条线是我的GPS更新方法,并定期运行。Latitude是一个实例变量,当我删除retain时,我就不能再使用我需要的其他方法访问该变量了。我在dealloc方法中发布了变量,但这似乎没有任何作用
我理解alloc释放范例,但我仍然不确定如何修复它。在设置它之前,必须释放以前保留的值。否则,在指定新指针时,释放的前一个对象没有任何引用它的内容,因此永远无法释放它 为了方便地执行此操作,我建议将其设置为
@property
,并使用self.latitude=[NSNumber numberWithFloat:[[coordinates objectAtIndex:0]floatValue]代码>。请注意,在分配中不再使用retain。这是假设您的属性设置了retain
标志,并为您保留它
即
@property(非原子,保留)NSNumber*latitude
在设置它之前,必须释放以前保留的值。否则,在指定新指针时,释放的前一个对象没有任何引用它的内容,因此永远无法释放它
为了方便地执行此操作,我建议将其设置为@property
,并使用self.latitude=[NSNumber numberWithFloat:[[coordinates objectAtIndex:0]floatValue]代码>。请注意,在分配中不再使用retain。这是假设您的属性设置了retain
标志,并为您保留它
即
@property(nonatomic,retain)NSNumber*latitude
在看不到其余代码的情况下,很难说您应该如何解决此问题,但最好的第一种方法可能是尝试自动释放它,如:
latitude = [[NSNumber numberWithFloat:[[coordinates objectAtIndex:0] floatValue]] autorelease];
另一个需要考虑的是使纬度成为一个属性并将其保留下来。这样,当您设置它时,它将释放以前的值。同样,在不知道如何使用latitude的情况下,很难为您指明一个明确的方向。在看不到其余代码的情况下,很难说您应该如何解决这个问题,但最好的第一种方法可能是尝试自动释放它,如:
latitude = [[NSNumber numberWithFloat:[[coordinates objectAtIndex:0] floatValue]] autorelease];
另一个需要考虑的是使纬度成为一个属性并将其保留下来。这样,当您设置它时,它将释放以前的值。同样,在不知道如何使用纬度的情况下,很难将您指向一个可靠的方向。向该对象发送-autorelease
可能会使其在其他方法中不可用。向该对象发送-autorelease
可能会使其在其他方法中不可用。