今までアニメーションにNSTimerを使っていたんですが、これだとメニューやコントロールを操作してると処理が止まってしまう事があります。というわけでNSThreadを使ってマルチスレッド処理にしてみました。実装は簡単ですが、使った事がない方のためにサンプルをば。
- (void)startThread
{
NSAutoreleasePool *pool;
int i;
for (i=0; i<10; i++) {
pool = [ [ NSAutoreleasePool alloc ] init ];
NSLog(@"ThreadTest");
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]];
[pool release];
}
}
- (void)play
{
[NSThread detachNewThreadSelector:@selector(startThread) toTarget:self withObject:nil];
}
playメソッドを呼び出すと1秒おきに「ThreadTest」と表示し、10回繰り返した後スレッドが終了します。基本的に detachNewThreadSelector でスレッドとして実行させたいセレクタ(引数、返り値無し)を指定してやれば、そのメソッドが別スレッドとして動き出します。ただし、スレッド内では自動解放プールが作成されないので、自分で管理する必要があります。この点だけ注意していれば特に問題は無いかと。
|