NSTimer を使用するか、定期的にスレッドを起動させることで、定期的に関数を呼び出すことができます。2 つのアプローチは基本的に同じように動作します。
timer = [ NSTimer
scheduledTimerWithTimeInterval:1
target:self
selector:@selector(doSomething)
userInfo:nil
repeats:NO
];
と
@autoreleasepool {
BOOL continueProcessingQueue = YES;
while (continueProcessingQueue) {
[self performSelectorOnMainThread:@selector(doSomething) withObject:nil waitUntilDone:NO];
NSDate *curtainTime = [[NSDate alloc] initWithTimeIntervalSinceNow:10];
NSDate *currentTime = [[NSDate alloc] init];
while (continueProcessingQueue && ([currentTime compare:curtainTime] != NSOrderedDescending)) {
if ([self.processThread isCancelled] == YES) {
continueProcessingQueue = NO;
}
[NSThread sleepForTimeInterval:1];
currentTime = [[NSDate alloc] init];
}
}
}
タイマーを使用すると、はるかに簡単に思えます。タイマーを使用するよりも 2 番目のアプローチが望ましい状況はありますか?