Я запускаю mainCoop в Какао, используя NSTimer, настроенный следующим образом:
mainLoopTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/fps target:self selector:@selector(mainloop) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:mainLoopTimer forMode:NSEventTrackingRunLoopMode];
При запуске программы я установил timeInterval в 0.0, чтобы основной цикл работал как можно быстрее.В любом случае, я хотел бы предоставить функцию для установки частоты кадров (и, следовательно, временного интервала таймера) на конкретное значение во время выполнения.К сожалению, насколько я знаю, это означает, что я должен повторно инициализировать таймер, поскольку Какао не предоставляет такую функцию, как "setTimerInterval". Это то, что я пробовал:
- (void)setFrameRate:(float)aFps
{
NSLog(@"setFrameRate");
[mainLoopTimer invalidate];
mainLoopTimer = nil;
mainLoopTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/aFps target:self selector:@selector(mainloop) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:mainLoopTimer forMode:NSEventTrackingRunLoopMode];
}
, но это вызывает следующую ошибку и останавливаетmainloop:
2010-06-09 11: 14: 15,88 myTarget [7313: a0f] setFrameRate 2010-06-09 11: 14: 15,88 myTarget [7313: a0f] * __NSAutoreleaseNoPool (): Объект 0x40cd80 класса __NSCFDate автоматически освобожден без пула на месте - только утечка 2010-06-09 11: 14: 15.869 myTarget [7313: a0f] * __NSAutoreleaseNoPool (): Объект 0x40e700 класса NSCFTimer автоматически выпущен без пула вместо - просто утечка 0.614628
Я также пытался воссоздать таймер, используя ключевое слово "retain", но это ничего не изменило.Любые идеи о том, как динамически изменить интервал NSTimer во время выполнения?
Спасибо!