1

countDown タイマーに奇妙な問題があります。このタイマーは、設定された時間 (つまり 60 秒) からカウントダウンされます。このコードは myViewDidLoad メソッドに配置されます。戻ってビューを再度ロードしない限り、すべてが機能します。ビューが読み込まれるたびに、カウントダウンが 1 秒ずつ増加します。

例えば:

  1. 最初のロード: 60、59、58...
  2. 2 回目のロード: 60、58、56...
  3. 3 回目のロード: 60、57、54...

私のコードは以下です。なぜこれが起こっているのか誰にも分かりますか?何かをどこかにリリースする必要がありますか?ありがとうございました!

countDown=[NSTimer scheduledTimerWithTimeInterval:1.0 target:self 
selector:@selector(TimeOver) userInfo:nil repeats:YES];
4

1 に答える 1

6

ビューが読み込まれるたびに新しいタイマーを作成しますが、古いタイマーはまだ存在します。タイマーのアクション メソッド ではTimeOver、秒数を追跡するインデックス変数をデクリメントし、各タイマーは起動するたびにそのメソッドを実行します。したがって、タイマーが 3 つある場合、インデックスは毎回 3 ずつ減少します。

ビューが読み込まれるたびに新しいタイマーを作成しないか、ビューが消えたときにタイマーを破棄する必要があります。

[countDown invalidate];
countdown = nil;

再表示されたら再作成します。

また、タイマーのアクション メソッドの署名が正しくないことに注意してください。次のように、何も返さず、1 つの引数 (タイマー自体) を取るメソッドである必要があります。

- (void)timeOver: (NSTimer *)tim;

また、Cocoa メソッドは大文字で始めるべきではありません。

于 2013-02-04T02:34:59.453 に答える