2017-05-15 1 views
0
[UIView animateWithDuration:1 animations:^{ 
    self.animateView.frame = CGRectMake(100, 100, 50, 50); 
} completion:^(BOOL finished) { 
    if (finished) { 
     NSLog(@"animation finished"); 
    } 
}]; 
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]]; 
NSLog(@"after runUntilDate"); 

Tant de code comme ci-dessus, c'est pourquoi? Que se passera-t-il si je commente la ligne runUntilDate?Pourquoi ajouter runUntilDate après l'instruction d'animation?

mise à jour: Si j'ajoute la ligne suivante (NSLog) à la dernière, elle ne s'exécutera pas jusqu'à la fin de l'animation. On dirait que runUntilDate bloque le thread principal, alors pourquoi nous devons bloquer le thread ici?

Répondre

0

Dans votre cas, je pense, rien. Voir here

+0

Pourquoi runUntilDate peut bloquer le thread principal? Et quand nous avons besoin de bloquer le fil principal comme ici? – Sugite

+0

Parce que runloop fonctionne dans le thread principal. Idéalement, vous ne devez pas bloquer le thread principal dans tous les cas. – SerjOxo

+0

runUntilDate suffit de redémarrer une autre itération de runloop, pourquoi mener au blocage des threads, pouvez-vous expliquer au niveau de la source? Merci! – Sugite