Sono in esecuzione di un ciclo principale a Cocoa utilizzando un NSTimer impostato in questo modo:intervallo di sostituzione NSTimer per la ripetizione del timer
mainLoopTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/fps target:self selector:@selector(mainloop) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:mainLoopTimer forMode:NSEventTrackingRunLoopMode];
all'avvio del programma ho impostato il TimeInterval a 0.0 in modo che il ciclo principale viene eseguito il più velocemente possibile. Ad ogni modo, vorrei fornire una funzione per impostare il framerate (e quindi l'intervallo di tempo del timer) su un valore specifico in fase di esecuzione. Purtroppo per quanto ne so che significa che ho per reinizializzare il timer dal cacao non fornisce una funzione come "setTimerInterval" Questo è quello che ho provato:
- (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];
}
ma questo getta il seguente errore e interrompe il ciclo principale :
2010-06-09 11: 14: 15,868 MyTarget [7313: a0f] setFrameRate 2010-06-09 11: 14: 15,868 MyTarget [7313: a0f] * __NSAutoreleaseNoPool(): Object 0x40cd80 di class __NSCFDate autoreleased senza pool sul posto - solo perdite 2010-06-09 11: 14: 15.869 myTarget [7313: a0f] * __NSAutoreleaseNoPool(): Object 0x40e700 di classe NSCFTimer autoreleased senza piscina in posto - solo che perde 0,614628
Ho anche cercato di ricreare il timer utilizzando la parola chiave "mantenere", ma che non ha cambiato nulla. Qualche idea su come modificare dinamicamente l'intervallo di un NSTimer in fase di runtime?
Grazie!
cosa devo fare invece di cambiare l'intervallo? – moka
Chiedo scusa. Ho letto male [versione mainLoopTimer]. Si sta agendo correttamente con il timer, ma sembra non esserci AutoReleasePool in posizione. dare un'occhiata qui: http://developer.apple.com/mac/library/documentation/cocoa/conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html – garph0
hmm Ho già provato a mettere un autoreleasepool sul posto, ma non ha funzionato , ma ci riproverò! – moka