1

合計 10 秒間、500 ミリ秒ごとにコードを実行したいと思います。このコードで0.5秒ごとにコードを実行しています

[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(getLevel:) userInfo:nil repeats: YES];

しかし、10秒後に実行を停止する方法がわかりません。「繰り返し」引数は、指定された時間を許可していないようです。誰かが私がこれでどこに行くべきかを教えてもらえますか?

ありがとうブライアン

4

4 に答える 4

5

invalidatescheduleTimerWithTimeInterval:target:selector:userInfo:repeats: が提供する NSTimerにメッセージを送信する必要があります。たとえば、クラスのプロパティまたは iVar でメソッドが返す NSTimer を割り当て、10 秒後invalidateにそれを呼び出します。

例:

.h:

@interface myClass{
NSTimer *myT;
}
[...]

.m:

[...]
{
    myT = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(getLevel:) userInfo:nil repeats: YES];

    [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(stop) userInfo:nil repeats:NO];
}

-(void)stop{
    [myT invalidate];
}
[...]

NSTimer必要に応じて、何らかのfinishフラグを実装し、メソッドにメッセージを送信した回数を追跡することで、別のメッセージを回避できgetLevelます。これは 0.5 秒ごとであるため、20 回になります。

しかしNSTimer、他のタイマーに関係なく10秒であることを知っているので、オブジェクトを2つにしたいと思います。これは、周波数を上下に変更する可能性があります...

于 2012-07-13T14:48:26.180 に答える
1

最善の方法は、クラスにプロパティを作成することです。

@property (nonatomic, strong) NSTimer *timer;
@property (nonatomic, strong) int ticks;

次に、getLevel セレクターでこれを呼び出します。

if (ticks >= 20) [self.timer invalidate];
// 20 is 10 seconds * 500 milliseconds
ticks++;
于 2012-07-13T14:49:13.677 に答える
1

あなたが行くことができる別の方法は-(void)stopTimer{} 、タイマーを無効にするセレクターを定義することです。次に、最初にタイマーを作成するときに、次のいずれかを実行します。

[self performSelector:@selector(stopTimer) withObject:nil afterDelay:10.0];

于 2012-07-13T15:17:56.507 に答える
0

別のタイマーを設定して、invalidate を使用して停止することができます。このタイマーの参照をivarまたはプロパティに保持するだけです。

詳細については、この回答を確認してください。

于 2012-07-13T14:51:24.483 に答える