NSTimerとNSThread (1/6)
作成:2011-03-02 09:36
更新:2011-03-02 09:43
更新:2011-03-02 09:43
■NSTimerによるタイマー機能
ここまでのプログラムは、すべて「最初から順に処理を実行して、すべて終わったら終了」といったものでした。が、プログラムによってはそういう単純な処理の仕方しかしないわけでもありません。
例えば、先に非同期通信を使ってネットワークからデータを受信するサンプルを作りましたが、これなどは「後から処理が呼び出される」という仕組みになっていました。こんな具合に、プログラムによっては「一定時間後に処理が呼び出される」とか「同時にいくつかの処理を実行する」というような場合もあります。
まずは「一定時間後に処理を呼び出す」という場合についてです。これは、いわゆる「タイマー」と呼ばれる機能が用いられます。タイマー機能は、Foundationフレームワークの「NSTimer」というクラスとして用意されています。これは、指定した時間が経過したら、あらかじめ設定されている処理を呼び出す働きがあります。一度だけ呼び出して終了することもできますし、一定間隔で何度も繰り返し呼び出し続けることもできます。
NSTimerは以下のような形でインスタンスを作成します。
ターゲット――タイマーで送信するメッセージの送り先となるオブジェクトを指定します。
呼び出すセレクタ――タイマーで送信されるメッセージのセレクタ(呼び出すメソッド)を@selectorで指定します。
受け渡す情報――呼び出すメソッドに受け渡す値やオブジェクトなどがあれば、NSDictionaryでまとめて指定します。
繰り返すかどうか――繰り返し処理を一定間隔で呼び出し続けるならYES、1回こっきりならNOを指定します。
これでタイマーを作成すると、即座にそのタイマーは作動開始します。つまり、インスタンスを作るだけで、後は放っておけばいいのですね。NSTimerには、その他にもいろいろと機能はあるのですが、後は「タイマーの止め方」だけわかればとりあえず十分でしょう。
◯タイマーを停止する
他、タイマーの状況(次の呼び出し時間、呼び出し間隔など)をやり取りするメソッドや、設定した処理を実行するメソッドなどもNSTimerには用意されています。
例えば、先に非同期通信を使ってネットワークからデータを受信するサンプルを作りましたが、これなどは「後から処理が呼び出される」という仕組みになっていました。こんな具合に、プログラムによっては「一定時間後に処理が呼び出される」とか「同時にいくつかの処理を実行する」というような場合もあります。
まずは「一定時間後に処理を呼び出す」という場合についてです。これは、いわゆる「タイマー」と呼ばれる機能が用いられます。タイマー機能は、Foundationフレームワークの「NSTimer」というクラスとして用意されています。これは、指定した時間が経過したら、あらかじめ設定されている処理を呼び出す働きがあります。一度だけ呼び出して終了することもできますし、一定間隔で何度も繰り返し呼び出し続けることもできます。
NSTimerは以下のような形でインスタンスを作成します。
NSTimer* 変数 = [NSTimer呼び出し間隔――処理を呼び出すまでの秒数を実数値で指定します。
scheduledTimerWithTimeInterval:呼び出し間隔
target: ターゲット
selector: 呼び出すセレクタ
userInfo: 受け渡す情報
repeats: 繰り返すかどうか ];
ターゲット――タイマーで送信するメッセージの送り先となるオブジェクトを指定します。
呼び出すセレクタ――タイマーで送信されるメッセージのセレクタ(呼び出すメソッド)を@selectorで指定します。
受け渡す情報――呼び出すメソッドに受け渡す値やオブジェクトなどがあれば、NSDictionaryでまとめて指定します。
繰り返すかどうか――繰り返し処理を一定間隔で呼び出し続けるならYES、1回こっきりならNOを指定します。
これでタイマーを作成すると、即座にそのタイマーは作動開始します。つまり、インスタンスを作るだけで、後は放っておけばいいのですね。NSTimerには、その他にもいろいろと機能はあるのですが、後は「タイマーの止め方」だけわかればとりあえず十分でしょう。
◯タイマーを停止する
[《NSTimer*》 invalidate];repeats:YESに指定し、繰り返し実行させる場合は、必要なくなったらこれでタイマーを停止させることができます。
他、タイマーの状況(次の呼び出し時間、呼び出し間隔など)をやり取りするメソッドや、設定した処理を実行するメソッドなどもNSTimerには用意されています。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
※関連コンテンツ
「初心者のためのObjective-Cプログラミング入門」に戻る