Plus susceptibles d'être en temps: + timeWithTimeInterval ou -performSelector: withObject: afterDelay:

StackOverflow https://stackoverflow.com/questions/1746826

  •  20-09-2019
  •  | 
  •  

Question

Je voudrais jouer un son pour seulement un court laps de temps, plus courte que la durée du fichier sonore. Par conséquent, en même temps que je commence à jouer, je voudrais faire la queue une tâche qui arrêtera le son.

Je vois deux choix pour faire la queue la méthode d'arrêt: NSTimer et performSelector withObject: afterDelay:

Quelqu'un sait lequel des deux est le plus susceptible de déclencher à temps, ou qui ont une priorité plus élevée? Il est impératif que je ne me appelé avec une précision de milliseconde, mais la précision à 0,1 seconde serait grande.


Addendum: Est-ce que quelqu'un sait où je pourrais trouver de la documentation sur la priorité des différentes tâches de temporisation et de retard? Par exemple, comment le rang ci-dessous:

  • tâches NSTimer
  • performSelector
  • l'appel du service après setNeedsDisplay a été appelé drawRect de vue
  • l'appel des routines de dessin d'une couche après setNeedsDisplay a été appelé
  • toutes autres tâches retardées

Et serait-il utile d'essayer de le faire dans un autre thread?

Était-ce utile?

La solution

performSelector:withObject:afterDelay: va créer une minuterie pour savoir quand le feu afin que les deux approches devraient être tout aussi (dé-) fiable. Si votre code effectue un calcul coûteux sur le thread principal et ne retourne pas le contrôle à la boucle d'exécution ou si la boucle d'exécution doit traiter beaucoup d'événements, la minuterie ne se déclenche pas à l'heure.

Autres conseils

Avoir un NSTimer, mais avec un intervalle de temps beaucoup plus petit que celui que le son doit jouer. Lorsque vos feux de minuterie, et qui est deux ou trois fois pendant que votre son joue, vous compter combien de temps a passé depuis que vous avez commencé. Lorsque ce temps dépasse une marge fixée par vous, vous arrêtez le son.

De ma compréhension, ils devraient être à peu près la même chose. Cependant, la meilleure façon de comprendre cela est de tester vous-même. Exécuter un tas de tests et d'enregistrer l'heure exacte, puis voir ce qui est plus proche.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top