2013/01/15更新

[XCODE] Objective-CでJavaScriptのsetIntervalやsetTimeoutを実現する方法

このエントリーをはてなブックマークに追加            

こんにちは、@yoheiMuneです。
今日はObjective-Cで、JavaScriptのsetIntervalやsetTimeoutのような機能を実装する方法を記載したいと思います。

画像



Objective-CでJSのsetTimeoutを実現する

Objective-CでsetTimeoutを実現するには、以下のように実装します。
- (void)viewDidLoad {
 
 	// NSTimerのインスタンスを作成する。
 	// Tintervalに何秒後かを指定し、targetとselectorに発火させるメソッドを指定します。
    // aTimerは、NSTimer型の変数
    aTimer = [NSTimer 
    	timerWithTimeInterval:3 
    	               target:self
    	             selector:@selector(showInformation) 
    	             userInfo:nil repeats:NO];

    // Timerを設定します。
    [[NSRunLoop mainRunLoop] 
    		addTimer:aTimer 
    		 forMode:NSDefaultRunLoopMode];
}

// NSTimerから呼び出されるメソッド
-(void) showInformation {
    NSLog(@"showInformation is called.");
}
NSTimerとNSRunLoopを使って、指定秒後にメソッドを呼び出すことができます。



Objective-CでJavaScriptのsetIntervalを実現する

続いて、Objective-CでJavaScriptのsetIntervalを実現する方法です。
以下のように実装します。
- (void)viewDidLoad {
 
 	// NSTimerのインスタンスを作成する。
 	// Tintervalに何秒後かを指定し、targetとselectorに発火させるメソッドを指定します。
 	// repeatsにYESを指定すると、繰り返し呼び出されます。    
    aTimer = [NSTimer 
    	timerWithTimeInterval:3 
    	               target:self
    	             selector:@selector(showInformation) 
    	             userInfo:nil repeats:YES];

    // Timerを設定します。
    [[NSRunLoop mainRunLoop] 
    		addTimer:aTimer 
    		 forMode:NSDefaultRunLoopMode];
}

// NSTimerから呼び出されるメソッド
-(void) showInformation {
    static int time = 1;
    NSLog(@"showInformation is called. time = %d", time);
    
    // Timerを終了する場合には、
    // NSTimerのインスタンスのinvalidateメソッドを呼び出します。
    if (time > 10) {
        NSLog(@"aTimer invalidate");
        [aTimer invalidate];
    }
    
    time++;
}
NSTimerのrepeatsをYESにすると、繰り返し呼び出されるようになります。
また呼び出しを中止する場合には、NSTimer#invalidateを呼び出します。



参考資料

今回利用したクラスのクラスリファレンスのURLを記載します。

- NSTimer Class Reference

- NSRunLoop Class Reference



最後に

上記のようなちょっとしたコードも調べないとわからなかったので、今回ブログに残しました。
簡単なTipsですが、どなたかの役に立てば幸いです。

最後までご覧頂きましてありがとうございました。





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。