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

NSTimerとNSThread (2/6)

作成:2011-03-02 09:38
更新:2011-11-13 22:04

■NSTimerで利用するクラスを用意する

では、実際にNSTimerを使ってみることにしましょう。NSTimerでは、処理を実行させるクラスを設定して、そこにメッセージを送信して処理を行います。ですから、まずタイマー用のクラスを定義しておき、これをmainなどでNSTimerに設定して利用する、というのが一番わかりやすいでしょう。

下のリスト欄に、タイマー用クラスのソースコードを掲載しておきましょう。ここでは、MyTestClassというクラスを作成し、ここで必要な処理を用意することにしました。このクラスには、以下のようなインスタンス変数が用意されています。

count――現在の実行回数
endcount――終了する回数

タイマーで処理を実行するごとにcountの値を増やしていき、endcountになったらタイマーを終了させる、というようにするわけですね。コンビニエンスコンストラクタでは、endcountとなる値を引数で渡すようにしてあります。

タイマーで呼び出して利用するのは、printMessage:checkEnd:です(checkEnd:は、printMessage:の中から呼び出します)。タイマーで呼び出すメソッドは、引数にNSTimerを渡すようにしておきます。これはなくても呼び出すことは出来るんですが、「どのタイマーから呼び出されたか」をこれでチェックできるので用意しておいたほうがいいでしょう。

呼び出されるprintMessage:では、userInfoで受け渡されたNSDictionaryから必要な情報をとり出しています。これは、
NSDictionary* 変数 = [《NSTimer*》userInfo];
このようにして取り出すことができます。今回は、@"msg"というキーの値を取り出して出力させています。ということは、NSTimer作成時に、NSDictionaryにこのキーの値を保管しておけばいい、ということになります。

printMessage:でメッセージを出力したら、checkEnd:で終了チェックをしています。countendcountが同じになったら、引数で渡されたNSTimerinvalidateを呼び出して終了しています。

――ざっと、こんな感じで、「タイマーで呼び出すクラス」はできあがりです。呼び出されるメソッドでNSTimerを受け取る以外は、さして難しいものはありませんね?

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

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

●プログラム・リスト●

※MyTestClass.h

#import <Foundation/Foundation.h>

@interface MyTestClass : NSObject {
	int count;
	int endcount;
}

+(MyTestClass*)myTestClassToEndCount:(int)n;
-(void)setEndCount:(int)n;
-(BOOL)checkEnd:(NSTimer*)t;
-(void)printMessage:(NSTimer*)t;

@end


※MyTestClass.m

#import "MyTestClass.h"

@implementation MyTestClass

+(MyTestClass*)myTestClassToEndCount:(int)n {
	MyTestClass* obj = [[MyTestClass alloc] init];
	[obj setEndCount:n];
	return obj;
}
-(void)setEndCount:(int)n {
	endcount = n;
}
-(void)printMessage:(NSTimer*)t {
	id s = [[t userInfo] objectForKey:@"msg"];
	NSLog(@"%@:%i",s,++count);
	[self checkEnd:t];
}
-(BOOL)checkEnd:(NSTimer*)t {
	BOOL flg = NO;
	if (endcount == count){
		NSLog(@"end.");
		flg = YES;
		[t invalidate];
	}
	return flg;
}
@end
※関連コンテンツ

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