Je dirigeais une MainLoop à Cocoa en utilisant un NSTimer mis en place comme ceci:Intervalle de changement NSTimer pour répéter la minuterie
mainLoopTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/fps target:self selector:@selector(mainloop) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:mainLoopTimer forMode:NSEventTrackingRunLoopMode];
Au démarrage du programme, je mis la timeInterval à 0.0 afin que le mainloop court aussi vite que possible. Quoi qu'il en soit, je voudrais fournir une fonction pour régler le framerate (et donc l'intervalle de temps de la minuterie) à une valeur spécifique à l'exécution. Malheureusement, pour autant que je sache, cela signifie que je dois réinitialiser la minuterie puisque Cocoa ne fournit pas une fonction comme « setTimerInterval » Voilà ce que j'ai essayé:
- (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];
}
mais cela jette l'erreur suivante et arrête le mainloop :
2010-06-09 11: 14: 15,868 MyTarget [7313: a0f] setFrameRate 09/06/2010 11: 14: 15,868 MyTarget [7313: a0f] * __NSAutoreleaseNoPool(): Object 0x40cd80 de class __NSCFDate libéré sans pool en place - juste fuite 2010-06-09 11: 14: 15.869 myTarget [7313: a0f] * __NSAutoreleaseNoPool(): Object 0x40e700 de classe NSCFTimer autoreleased sans piscine en place - juste une fuite 0,614628
J'ai aussi essayé de recréer la minuterie en utilisant le mot-clé « conserver », mais cela ne change rien. Des idées sur la façon de modifier dynamiquement l'intervalle d'un NSTimer à l'exécution?
Merci!
Que devrais-je faire au lieu de changer l'intervalle? – moka
Je vous demande pardon. J'ai mal lu [mainLoopTimer version]. Vous agissez correctement avec le minuteur, mais il semble qu'il n'y ait pas de AutoReleasePool en place. jetez un oeil ici: http://developer.apple.com/mac/library/documentation/cocoa/conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html – garph0
hmm J'ai déjà essayé de mettre en place un autoreleasepool en place, mais cela n'a pas fonctionné , mais je vais essayer à nouveau! – moka