xcode工具查找内存问题,访问指向另一个变量ecc的位置

时间:2011-04-19 12:20:55

标签: iphone ios objective-c memory-management

我正在使用cocos2d,但问题是一般性的。 我有一个班级

CCNode *scaleLayer

在touchesMoved事件中设置

scaleLayer.scale=(some calculation)

如果我在设备中编译程序崩溃,在模拟器上运行良好。 如果我把nslogs放在先前的指令之前,即使在设备中也能正常工作。 可能是一些记忆,指针或它可能是什么? 然而,存在一个xcode工具,可以让我找到或理解在哪里指出我的眼睛? 感谢

这是代码:

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSSet *allTouches = [event allTouches];
//NSLog(@"comincio");
switch ([allTouches count]) {
    case 2: { //Double Touch
        UITouch *t1 = [[allTouches allObjects] objectAtIndex:0];
        UITouch *t2 = [[allTouches allObjects] objectAtIndex:1];
        CGPoint p1=[self convertTouchToNodeSpace: t1];
        CGPoint p2=[self convertTouchToNodeSpace: t2];                  

        initialDistance = [self distanceBetweenTwoPoints:p1 B:p2];
        oldScale=scaleLayer.scale;
        NSLog(@"distanza iniz %f",initialDistance);
    } break;
            default:
        break;
}
}

-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    CGPoint location;   
    UITouch *t1,*t2;    
    CGPoint p1,p2;

    NSSet *allTouces=[event allTouches];
    switch ([allTouces count]) {
case 2:
            //NSLog(@"2 tocchi");
            t1=[[allTouces allObjects] objectAtIndex:0];
            t2=[[allTouces allObjects] objectAtIndex:1];
            p1=[self convertTouchToNodeSpace: t1];
            p2=[self convertTouchToNodeSpace: t2];
            CGFloat finalDistance=[self distanceBetweenTwoPoints:p1 B:p2];
//if i put here NSLog("%f %f %f",oldScale,finalDistance,initialDistance); all goes well
            scaleLayer.scale=oldScale*finalDistance/initialDistance;
            NSLog(@"scala %f",scaleLayer.scale);//finalDistance/initialDistance);
//this nslog give me error if i not put that nslog before
            break;

        default:
            break;
    }
}

-(CGFloat)distanceBetweenTwoPoints:(CGPoint)A B:(CGPoint)B{
    float x=B.x-A.x;
    float y=B.y-A.y;
    return sqrt(x*x+y*y);
}

2 个答案:

答案 0 :(得分:0)

尝试使用静态分析器构建(Shift-Command-A)

尝试观看内存地址。以下是一些可以帮助您入门的链接:  scottmpeak.comSO discussion

答案 1 :(得分:0)

您可以使用的一个选项是zombies,已在stackoverflow中对其进行了解释,因此我不打算在此处执行此操作。

但是如果你得到EXC_BAD_ACCESS类错误,你可以添加一个异常断点。这有时也有帮助。这些是这样做的步骤

  1. 在断点导航器的左下角单击加号 按钮。
  2. 在弹出窗口中,选择“添加例外断点”
  3. 选择例外类型。我通常选择“全部”例外
  4. 点击完成。
  5. Apple解释了这一点here