libro
www.tuyano.com
初心者のためのObjective-Cプログラミング入門

NSTimerとNSThread (3/6)

作成:2011-03-02 09:41
更新:2011-11-13 22:06

■NSTimerを使って処理を実行させる

では、作成したMyTestClassクラスを使って、NSTimerで一定間隔ごとに処理を実行させるプログラムを書いてみましょう。下のリスト欄に、その例を挙げておきます。

これを実行すると、コンソールに以下のようにメッセージが出力されていきます。
start!!
timer message:1
timer message:2
timer message:3
end.
ここでは、例によってNSRunLoopを実行させているので、ひと通りの動作が終わったところで手動で終了させてください。――では、ここで行っている処理を整理していきましょう。

1.タイマー用クラスのインスタンス作成
まずは、MyTestClassインスタンスを作成します。ここでは、myTestClassToEndCount:を指定しています。つまり、3回実行したら終了させるわけですね。

2.userInfo用NSDictionaryの用意
NSTimerでは、userInfo:で必要な情報を受け渡せるようになっていました。そのためのNSDictionaryを用意しておきます。今回は、@"msg"というキーでNSStringを用意してあるだけですが、もちろん必要に応じていくらでも値を保管しておけます。

3.NSTimerの作成と実行
準備が整ったら、NSTimerインスタンスを作成します。これは引数が多いので、間違えないように用意しましょう。

scheduledTimerWithTimeInterval: 呼び出すまでの間隔(秒数)ですね。今回は「1.0」とします。
target: タイマーでメッセージを送るオブジェクトを指定します。先に用意しておいた「obj」を指定します。
selector: これは送信するメッセージセレクタの指定でした。「@selector(printMessage:)」として、printMessage:を呼び出すようにしておきます。
userInfo: 必要な値の受け渡しです。「data」インスタンスを指定します。
repeats: 繰り返すかどうかを示すBOOL値でした。「YES」にしておきます。

――これで、タイマーは実行開始します。後は、[[NSRunLoop currentRunLoop] run];でプログラムが終了しないようにしておきます。

NSTimerは、インスタンス作成時のコンビニエンスコンストラクタがやたら引数が多かったり、いちいちクラスを用意しないといけなかったりで面倒くさい感じがしますが、実際に作ってしまえば、それほどムズ介しものでないことがわかるでしょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

#import <Foundation/Foundation.h>
#import "MyTestClass.h"

int main (int argc, const char * argv[]) {
    @autoreleasepool {
        MyTestClass* obj = [MyTestClass
                            myTestClassToEndCount:3];
        NSDictionary* data = [NSDictionary
                              dictionaryWithObject:@"timer message"
                              forKey:@"msg"];
        NSTimer* timer = [NSTimer
                          scheduledTimerWithTimeInterval:1.0
                          target:obj selector:@selector(printMessage:)
                          userInfo:data repeats:YES];
        NSLog(@"start!!");
        
        // 終了しないようにしておく
        [[NSRunLoop currentRunLoop] run];
    }
    return 0;
}
※関連コンテンツ

「初心者のためのObjective-Cプログラミング入門」に戻る