タイマーを用いて定期的に実行する
定期的にメソッドを実行するにはNSTimerクラスを利用する。
NSTimer *timer;
まずヘッダファイルでタイマーを定義する。タイマー処理はscheduledTimerWithTimeIntervalを用いる。
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(tick:) userInfo:nil repeats:YES];
引数は、①呼び出し間隔(秒)②タイマー発火時に呼び出すメソッドのあるオブジェクト③タイマー発火時に呼び出すメソッド④タイマー発火時に呼び出すメソッドに渡す情報⑤繰り返しをするか否かの5項目。@selectorは、メソッド名を記述することでそのメソッドを呼び出すことができる。Objective-Cでは、Selectorを用いることで実行時に動的に呼び出すメソッドを変更できるとのこと。
- (void)viewDidUnload { [timer invalidate]; timer = nil; } - (void)dealloc { if ( timer) [timer invalidate]; [super dealloc]; }
なおタイマーを停止する際は、invalidateメソッドを使用する。invalidateはreleaseまでしてくれる。
現在時刻を表示する
最後に定期的に呼び出すメソッド内に現在の時刻を取得し、必要な形に整形する処理を記述する。
- (void)tick:(NSTimer *)theTimer { // 初期化(init)し現在の時刻を取得する NSDate *date = [NSDate date]; // NSDateFomatter=NSDateの値を整形する NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setLocale:[NSLocale currentLocale]]; // 年月日曜日を全て表示する [formatter setDateStyle:NSDateFormatterFullStyle]; // 時分秒タイムゾーンを全て表示する [formatter setTimeStyle:NSDateFormatterFullStyle]; // Date型からString型に置換する NSString *dateStr = [formatter stringFromDate:date]; // allocしたformatterをreleaseする // なおClassObjectである*dateは自動的にメモリ解放されるので記述は不要 [formatter release]; }
引数のtheTimerは、呼び出し元のタイマー自身を示す。