2 votes

Puis-je exécuter une méthode de classe après un délai ?

Je suis à l'intérieur d'une méthode de classe, et je veux déclencher une autre méthode de classe, de la même classe, après un délai. Il ne semble pas que je puisse utiliser

[MyClass performSelector:@selector(myMethod) withObject:nil afterDelay:1]

D'autres options ?

Édité :

C'est ma faute. J'ai supposé que cet appel n'était pas disponible dans une méthode de classe, parce qu'il ne se complétait pas automatiquement lorsque je l'ai écrit. Comme plusieurs personnes l'ont fait remarquer ici, cela fonctionne bien en fait. Je ne sais pas pourquoi il ne s'est pas auto-complété dans mon cas, mais j'ai appris une leçon sur la nécessité de faire des suppositions lorsque cela se produit. Merci à tous.

4voto

Fabian Kreiser Points 5239

Vous utilisez -class pour obtenir une référence réelle à la classe et ensuite l'envoyer comme ceci :

[[MyClass class] performSelector:@selector(myClassMethod) withObject:nil afterDelay:1.0];

1voto

Andrew Points 1768

Vous pouvez également utiliser dispatch_after

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){
    [MyClass myClassMethod];
});

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