10

そのようなランループを設定した場合:

NSRunloop* loop = [NSRunloop currentRunLoop];
[runLoop addTimer:anyTimer forMode:NSDefaultRunLoopMode];

もう一度止めてもいいですか?または、さらなるアクションをトリガーするために使用する通知を無視する唯一の方法ですか?

わかりました、私は問題の例を挙げます:

-(void)blinkeffekt:(double)pollingTime{

NSRunLoop* runLoop = [NSRunLoop currentRunLoop];

if (pollingTime != 0) {
    NSTimeInterval interval =(double)pollingTime / 1000;
    NSTimer timer = [NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(polling) userInfo:nil repeats:YES];
    [runLoop addTimer:timer forMode:NSDefaultRunLoopMode];
}
else {

    [timer invalidate];
}

}

確かに、いくつかのエラーがあります - 間違いありません。しかし、それは私の問題を示していると思います。これは今までの答えでは本当に解決できません。

タイマーを実行し、後で停止する必要があります。理想的には、クラス内の別の機能から外します。しかし、その後、「タイマー」にアクセスできなくなり、そのような「メッセージ」が利用可能かどうかをrunloopは把握できません。関数の呼び出しごとに新しいタイマーを登録すると、非常に効果がなくなります。

4

1 に答える 1

29

RunLoop からタイマーを削除するには、無効化メッセージをタイマーに送信する必要があります。

ドキュメントを参照

[anyTimer invalidate];
于 2010-07-19T08:07:47.650 に答える