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 :.