PS:程序有时进入循环。
-(void)updateMinPosition{
float valueMinX = 150;
float valueMinY = 150;
float valueMinZ = 150;
NSString *nameMinimoX = [NSString stringWithFormat:@"default"];
NSString *nameMinimoY = [NSString stringWithFormat:@"default"];
NSString *nameMinimoZ = [NSString stringWithFormat:@"default"];
for(int i = 0; i< [arrayPosizioniMovimento count]; i++){
//Posizione is my class. It contain a NSString name, 3 float valueX, valueY, valueZ
Posizione *tempPosition;
tempPosition = [[Posizione alloc]init];
tempPosition = [arrayPosizioniMovimento objectAtIndex:i];
if(tempPosition.valueX <= valueMinX){
valueMinX = tempPosition.valueX;
nameMinimoX = tempPosition.nome;
}
if(tempPosition.valueY <= valueMinY){
valueMinY = tempPosition.valueY;
nameMinimoY = tempPosition.nome;
}
if(tempPosition.valueZ <= valueMinZ){
valueMinZ = tempPosition.valueZ;
nameMinimoZ = tempPosition.nome;
}
[tempPosition dealloc];
}
labelMinX.text = nameMinimoX;
labelMinY.text = nameMinimoY;
labelMinZ.text = nameMinimoZ;
}
答案 0 :(得分:4)
看起来可能是[tempPosition dealloc]
电话。您正在声明该变量并对其执行alloc / init,然后将其分配给数组中的对象,因此不需要alloc / init。当您在底部调用dealloc时,您将释放驻留在数组中的对象,因此您的数组现在将具有一个空值,这将导致EXEC ....错误
答案 1 :(得分:4)
第一眼看到你的代码有几个问题:
Posizione *tempPosition;
tempPosition = [[Posizione alloc]init];
tempPosition = [arrayPosizioniMovimento objectAtIndex:i];
在第二行中,您将创建新的Posizione实例,并在此之后将另一个值分配给同一个变量。实际上,这意味着您永远不会使用您创建的实例并导致内存泄漏。要使用数组中的元素,只需编写
即可Posizione *tempPosition = [arrayPosizioniMovimento objectAtIndex:i];
第二个 - 是以下一行
[tempPosition dealloc];
首先,您应该永远不直接调用此方法,而是发送一个对象-release
消息 - 当它的保留计数变为0时,它将自动解除分配。在您的情况下,您不会在该代码中保留tempPosition
对象,以便在那里;不需要在此处释放它 - 只需删除该行。
P.S。使用fast enumeration还可以使您的代码更具可读性并且不易出错:
for (Posizione *tempPosition in arrayPosizioniMovimento){
if(tempPosition.valueX <= valueMinX){
...
答案 2 :(得分:1)
您可以启用Objective-C Exception断点来精确定位该行。
跳出来的东西是
[tempPosition dealloc];
我不知道该告诉你怎么做。你需要调用release而不是dealloc。
[tempPosition release];
但是我不确定这是如何适合你的代码的其余部分,你在那里分配一个变量,然后立即为它分配另一个值。
我认为你应该删除alloc和dealloc
所以删除:
//Posizione is my class. It contain a NSString name, 3 float valueX, valueY, valueZ
Posizione *tempPosition;
tempPosition = [[Posizione alloc]init];
和
[tempPosition dealloc];
答案 3 :(得分:0)
Pease显示如何初始化arrayPosizioniMovimento
。
如果您将其初始化为arrayPosizioniMovimento = [NSMutableArray arrayWithCapacity:n];
,则需要添加[arrayPosizioniMovimento retain];