Je suis curieux de savoir quels sont les avantages de l'utilisation de hasEventListener() lors de l'envoi d'un événement à l'aveugle?Pourquoi utiliser IEventDispatcher.hasListener()?
Par exemple, je vois dans les extraits de code du framework Flex telles que les suivantes:
// from ArrayList.setItemAt()
var hasCollectionListener:Boolean = hasEventListener(CollectionEvent.COLLECTION_CHANGE);
if (hasCollectionListener)
{
dispatchEvent(new CollectionEvent(....))
}
Je suppose que ce infère des avantages de performance de ne pas l'envoi de l'événement si personne n'écoute, par rapport à l'aveuglette l'envoi, indépendamment du fait qu'il y ait des auditeurs attachés.
Cependant, cela ne semble pas logique.
Les écouteurs sont stockés en interne dans un hashmap performant. J'aurais pensé que vérifier si un écouteur existe est à peu près aussi performant qu'itérer à travers le tableau vide d'auditeurs.
Par conséquent, pourquoi prendre la peine de vérifier, et pas simplement invoquer aveuglément la méthode dispatchEvent
? L'exemple de code d'origine est sensiblement plus maladroit que s'ils avaient simplement envoyé l'événement.
Cordialement,
Marty
Oui, un peu ce que je pensais. –
Malheureusement, cette vérification n'est pas redondante. 'dispatchEvent (new Event (" foo "))' crée toujours un nouvel objet de type 'Event' et le distribue. Peu importe s'il y a des auditeurs enregistrés ou non. Voir ma réponse pour plus d'informations. –
Fonctionnellement, il est redondant. Cela ressemble à une micro optimisation pour moi ... Ce n'est pas comme si les objets Event sont terriblement grands ... J'essaie d'éviter les micro optimisations en faveur de moins de code dans la plupart des cas. –