シミュレータではなく、デバイスでのみ発生するように見える問題があります。
私のアプリのアニメーションは、次の方法を使用して開始および停止されます。
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メソッドが機能していないようです。さらに、[animationTimerinvalidate]はEXC_BAD_ACCESSを引き起こします。
明らかですが小さな欠陥を見つけました。stopAnimationメソッドにif(animationTimer!= nil)を追加すると、クラッシュは防止されますが、アニメーションタイマーが適切に初期化されないという問題は解決されません。
編集:上記はクラッシュを防ぐことはできません。AnimationTimer!= nilであるにもかかわらず、invalidateを呼び出すと、EXC_BAD_ACCESSが発生します。
また、この問題はデバイスで常に発生するわけではありません。たぶん40%の確率で。