我正在使用类似这样设置的NSTimer在Cocoa中运行一个mainLoop:
mainLoopTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/fps target:self selector:@selector(mainloop) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:mainLoopTimer forMode:NSEventTrackingRunLoopMode];
在程序启动时,我将timeInterval设置为0.0,以便主循环尽可能快地运行。不管怎样,我希望在运行时提供一个设置帧率(因此是计时器的时间间隔)的函数,以设置特定值。不幸的是,就我所知,这意味着我必须重新初始化计时器,因为Cocoa不提供像“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];
}
但是这会抛出以下错误并停止主循环:
2010-06-09 11:14:15.868 myTarget[7313:a0f] setFrameRate 2010-06-09 11:14:15.868 myTarget[7313:a0f] *__NSAutoreleaseNoPool():对象0x40cd80的类__NSCFDate在没有放置池子的情况下被自动释放,只是泄漏了。 2010-06-09 11:14:15.869 myTarget[7313:a0f] *__NSAutoreleaseNoPool():对象0x40e700的类NSCFTimer在没有放置池子的情况下被自动释放,只是泄漏了。 0.614628
我还尝试使用“retain”关键字重新创建计时器,但是那并没有改变任何东西。有没有关于如何在运行时动态更改NSTimer间隔的想法?
谢谢!