プロトコルとデリゲートについて勉強しています。

デリゲートの中身については
ある程度イメージもできて理解できたと思います。

だけれど、詳しい過程?進み方が理解できません。

class A:UITextFieldDelegate{

@IBOutlet var textField:UITextField!
override func viewDidLoad() {
        super.viewDidLoad()
        // selfをデリゲートにする
        self.textField.delegate = self
    }
func textFieldShouldReturn(textField: UITextField) -> Bool{
//リターンキーが押されたとき
}
}

こういうプログラムがあったとき、
リターンキーが押された後、まずはどこにその通知が行くのでしょうか?
クラスAにUITextFieldDelegateが移譲されているので
直接クラスAのfunc textFieldShouldReturn 関数に通知されるのでしょうか?

質問が解りにくいかもしれませんが
delegateの処理の進み方が知りたいです。

宜しくお願いします。