这是一个绝对的大脑驱逐舰:
注意:我正在使用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运行。但即使我对速度进行了适当的更改,它也不会改变。有谁知道为什么?
答案 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变量。