Objective-C int变量不保持其值

时间:2011-09-06 20:22:35

标签: objective-c ios

这是一个绝对的大脑驱逐舰:

注意:我正在使用XCode 4.2与iOS 5和ARC(自动引用计数)

如果有人可以帮助解释为什么我的变量都没有保留其价值,我将不胜感激。目前我有 int 变量速度。继承了基本代码纲要:

在标题文件中:

@interface GameLoop : NSObject {
   CADisplayLink *refresh;

   int speed;
}

在.m文件中:

- (void)awakeFromNib {
   screenRefresh = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateGame:)];
   [screenRefresh setFrameInterval:1];
   [screenRefresh addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; 
}

- (void)createNewGame {
   speed = 4;
}

- (void)updateGame:(CADisplayLink *)gameTime {
   [factory slideViews:speed];  // <---- Speed ALWAYS equals 0
}

工厂类只是移动东西。如果我插入4代替速度一切都很完美。我也尝试过:

@property (nonatomic, assign) int speed;

合成并使用self.speed。如果有人可以帮忙,我会非常感激!我确信这是一件简单的事情,但事实上,我在一种方法中分配并且在另一种方法中没有贯彻,这让我感到疯狂。我也使用过NSLog("%d", speed)并在我分配的方法中吐出正确的值,并在分配之前重新调用它。

更新 经过一些调试后,似乎一旦创建了计时器,就不会在更新循环中更新全局变量。如果我在分配 CADisplayLink 之前使 speed = 4 ,游戏将以4运行。但即使我对速度进行了适当的更改,它也不会改变。有谁知道为什么?

2 个答案:

答案 0 :(得分:0)

您确定速度ivar没有保持价值吗?你能尝试下面的代码吗?

- (void)createNewGame {
    NSLog(@"createNewGame: speed <- 4");
    speed = 4;
    NSLog(@"createNewGame: speed = %d", speed);
}

- (void)updateGame:(CADisplayLink *)gameTime {
    NSLog(@"updateGame before slideViews: speed = %d", speed);
    [factory slideViews:speed];  // <---- Speed ALWAYS equals 0
    NSLog(@"updateGame after slideViews: speed = %d", speed);
}

您是否有任何代码可以覆盖速度ivar?

答案 1 :(得分:0)

好的,所以这个问题与我最初认为的上下文有关。问题是我没有正确地将内容分配到内存中,因此我分配了nil变量。

相关问题