88 votes

Ajout d'un délai entre l'exécution des deux lignes suivantes

J'ai besoin d'ajouter un délai entre l'exécution de deux lignes dans une (même) fonction. Existe-t-il une option favorable pour faire cela ?

Remarque : Je n'ai pas besoin de deux fonctions différentes pour le faire, et le délai ne doit pas affecter l'exécution d'autres fonctions.

eg :

line 1: [executing first operation];

line 2: Delay                        /* I need to introduce delay here */

line 3: [executing second operation];

Toute aide est la bienvenue. Merci d'avance...

4voto

Attila H Points 2164

Si vous ciblez iOS 4.0+, vous pouvez procéder comme suit :

[executing first operation];
double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    [executing second operation];
});

2voto

亚历山大 Points 2069

Comme l'a écrit @Sunkas, performSelector:withObject:afterDelay: est le pendentif de la dispatch_after simplement qu'il est plus court et que vous avez le droit d'utiliser la méthode normale. objective-c syntaxe. Si vous avez besoin de passer des arguments au bloc que vous voulez retarder, vous pouvez simplement les passer à travers le paramètre withObject et vous le recevrez dans le selector vous appelez :

[self performSelector:@selector(testStringMethod:) 
           withObject:@"Test Test" 
           afterDelay:0.5];

- (void)testStringMethod:(NSString *)string{
    NSLog(@"string  >>> %@", string);
}

Si vous souhaitez toujours choisir vous-même si vous l'exécutez sur le thread principal ou sur le thread courant, il existe des méthodes spécifiques qui vous permettent de le spécifier. C'est ce que dit la documentation d'Apple :

Si vous souhaitez que le message soit mis en file d'attente lorsque autre que le mode par défaut, utilisez l'option performSelector:withObject:afterDelay:inModes :. Si vous n'êtes pas sûr que le thread en cours soit le thread principal, vous pouvez utiliser la méthode performSelectorOnMainThread:withObject:waitUntilDone : ou performSelectorOnMainThread:withObject:waitUntilDone:modes : pour garantir que votre sélecteur s'exécute sur le thread principal. Pour annuler un mis en file d'attente, utilisez les méthodes cancelPreviousPerformRequestsWithTarget : ou cancelPreviousPerformRequestsWithTarget:selector:object :.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X