Comment une méthode déléguée sait-elle quand elle doit être appelée

Je me request juste comment exactement une méthode de délégué sait quand appeler? Par exemple, dans le protocole UITextFieldDelegate , la méthode textFieldDidBeginEditing: est appelée lorsque l'édition commence dans le champ de text (à condition que j'ai implémenté cette méthode).

Alors, comment exactement le code détecter quand appeler textFieldDidBeginEditing: Le système vérifie-t-il simplement si textFieldDidBeginEditing: est déjà implémenté et s'il l'exécute? Y a-t-il quelque chose sous le capot que je ne vois pas?

Exactement.

Je ne peux pas garantir que le code cadre d'Apple est mis en œuvre sous le capot, mais un refrain extrêmement commun est:

 if ([[self delegate] respondsToSelector:@selector(someInstance:didDoSomethingWith:)]) { [[self delegate] someInstance:self didDoSomethingWith:foo]; } 

Cela vous permet d'avoir des methods de délégation optionnelles, ce qui semble être votre question.

Le code ne "détecte pas quand appeler" une méthode déléguée. TextField reçoit un événement et appelle la méthode sur son délégué (avec la méthode textFieldDidBeginEditing: implémentée).

En bref, lorsque vous appuyez sur le champ de text pour commencer à éditer, le champ textField dit 'oh, je suis en train d'éditer maintenant!' et appelle en interne [self.delegate textFieldDidBeginEditing:self] , où le délégué est l'instance dans laquelle vous avez défini le délégué (généralement une sous-class UIViewController)