J'ai un problème avec mon code. Je veux lancer le thread mais quand il est lancé, il ne peut pas démarrer une isthme NSTimer. Pouvez-vous m'aider?Problème avec Thread et NSTimer
-(void)detectionMove:(NSTimer*)timer{
int indexArray = [[[timer userInfo] objectForKey:@"arrayIndex"] intValue];
// do something
}
-(void)callDectectionMove:(NSNumber*)arrayIndex{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] init];
[myDictionary setObject:arrayIndex forKey:@"arrayIndex"];
//This istruction can't lunch a detectionMove method
[NSTimer scheduledTimerWithTimeInterval:timeToCatch target:self selector:@selector(detectionMove:) userInfo:myDictionary repeats:NO];
[pool release];
}
-(void)detectPositionMovement{
for(int i = 0; i< [self.arrayMovement count]; i++){
if((actualAccelerometerX+sensibilityMovement) > [[[[self.arrayMovement objectAtIndex:i] arrayPositionMove]objectAtIndex:0] valueX] && (actualAccelerometerX-sensibilityMovement) < [[[[self.arrayMovement objectAtIndex:i] arrayPositionMove]objectAtIndex:0] valueX] &&
(actualAccelerometerY+sensibilityMovement) > [[[[self.arrayMovement objectAtIndex:i] arrayPositionMove]objectAtIndex:0] valueY] && (actualAccelerometerY-sensibilityMovement) < [[[[self.arrayMovement objectAtIndex:i] arrayPositionMove]objectAtIndex:0] valueY] &&
(actualAccelerometerZ+sensibilityMovement) > [[[[self.arrayMovement objectAtIndex:i] arrayPositionMove]objectAtIndex:0] valueZ] && (actualAccelerometerZ-sensibilityMovement) < [[[[self.arrayMovement objectAtIndex:i] arrayPositionMove]objectAtIndex:0] valueZ])
[NSThread detachNewThreadSelector:@selector(callDectectionMove:) toTarget:self withObject:[NSNumber numberWithInt:(int)i]];
}
}
Pas tout à fait correct. Un temporisateur planifié est implicitement conservé. Il n'y a pas besoin de le retenir. Votre deuxième pensée peut-être bien dur. – tonklon
c'est l'objet de concept est ajouté au pool de version automatique actuel avant que l'objet soit renvoyé à partir de la méthode de classe. Dans votre cas, l'objet 'pool' est le pool de publication automatique en cours qui est libéré avant la fermeture du thread. donc quand 'pool' est libéré tout l'objet à l'intérieur recevra le message de libération - ainsi pour conserver l'objet vous devriez augmenter le compte de retenue par 1. –
J'ai fait une étude de détail en utilisant un programme d'exemple, quelques observations 1. Minuterie tirer sur la même boucle de lancement où il a créé, chaque thread a sa propre boucle d'exécution de sorte que votre thread doit être en cours d'exécution pour que votre minuteur se déclenche le temps que vous avez mentionné. 2. scheduledTimerWithTimeInterval Renvoie l'objet NSTimer avec un nombre de retenues égal à '2', de sorte qu'un seul compte soit réduit lorsque le pool de libération automatique est libéré et le second sera réduit une fois que l'événement de temporisation est déclenché. –