Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标c:保留编号_Objective C_Memory_Memory Leaks_Retain_Nsnumber - Fatal编程技术网

Objective c 目标c:保留编号

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时,我就不能再使用我需要的其他方法访问该变量了

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

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
可能会使其在其他方法中不可用。