web-dev-qa-db-ja.com

javascript setTimeoutと同等のObjectiveC?

CocoaTouch ObjectiveCで30秒に1回、または30秒ごとにイベントを発生させるソリューションがあるかどうか疑問に思いました。

26
jantimon

いくつかのオプションがあります。

最も速く使用できるのは NSObject :です。

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay

(他にも若干の違いがあります。)

より詳細な制御が必要な場合、または30秒ごとにこのメッセージを送信すると言うことができるようにする場合は、おそらく NSTimer が必要です。

32

PerformSelector:ファミリには制限があります。最も近いsetTimeoutに相当するものは次のとおりです。

dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC * 0.5);
dispatch_after(delay, dispatch_get_main_queue(), ^(void){
    // do work in the UI thread here
});

EDIT:構文糖衣構文と実行をキャンセルする機能(clearTimeout)を提供するいくつかのプロジェクト:

42
Blago

NSTimer クラスを見てください:

NSTimer *timer;
...
timer = [[NSTimer scheduledTimerWithTimeInterval:30.0 target:self selector:@selector(thisMethodGetsFiredOnceEveryThirtySeconds:) userInfo:nil repeats:YES] retain];
[timer fire];

他の場所に、イベントを処理する実際のメソッドがあります。

- (void) thisMethodGetsFiredOnceEveryThirtySeconds:(id)sender {
   NSLog(@"fired!");
}
13
Alex Reynolds
+[NSTimer scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:]

ドキュメント

他のNSTimerメソッドも確認することをお勧めします

3
Joost