我遇到的问题似乎只发生在设备上,而不是模拟器上。
我的应用程序的动画使用以下方法启动和停止:
NSTimer* animationTimer;
-(void)startAnimation
{
if(animationTimer == nil)
animationTimer = [NSTimer scheduledTimerWithTimeInterval:1.0f/60.0f target:self selector:@selector(drawView) userInfo:nil repeats:YES];
}
-(void)stopAnimation
{
[animationTimer invalidate];
animationTimer = nil;
}
在模拟器中,这可以正常工作,并且 drawView 开始以 60fps 的速度被调用。在设备上(在 iPod Touch 上测试), scheduleTimerWithTimeInterval 方法似乎不起作用。此外,[animationTimer invalidate] 会导致 EXC_BAD_ACCESS。
我发现了一个明显但很小的缺陷;将 if(animationTimer != nil) 添加到 stopAnimation 方法将防止崩溃,但不能解决动画计时器未正确初始化的问题。
编辑:以上内容并不能防止崩溃。animationTimer != nil 但调用无效会导致 EXC_BAD_ACCESS。
还应该补充一点,这个问题不会一直在设备上发生。也许有 40% 的时间。