Objective-C: addendum sur les notifications et les délégués

Répondez à la question de ilew avec un véritable article de mieux expliquer, par exemple attacher , comment ils fonctionnent et délégués notifications. L'utilisation d'un modèle que nous voyons tout d'abord comment le modèle de délégué:

Delegate

Un objet à la recherche d'un délégué

Dans la pratique, le modèle nécessite qu'un objet (le délégant) expose un point d'entrée unique à travers lequel un second objet (le délégué) sera en mesure de recevoir des messages / notifications du délégant:

Delegato e delegante

Délégant et délégué

Il est important de comprendre que la communication entre le délégant et le délégué se fait via un protocole. Ce protocole est défini à partir de l'objet parent (le délégant) et doit être connue par le délégué. Nell ' exemple j'ai joint , j'ai utilisé le schéma suivant:

Esempio delegato

Exemple délégué

Permettez-moi de vous montrer les étapes séquentielles dans le code suivant:

  1. J'ai appelé un de mes cours de UIView
    1
    UIView @ Interface DelegateView: UIView
  2. J'ai créé une propriété delegate
    1
    2
    3
    4
    5
    UIView { @ Interface DelegateView: UIView {
    @ Privé
    __weak Identifiant <DelegateViewProtocol> déléguée;
    }
    nonatomic, weak ) id<DelegateViewProtocol> delegate; @ Propriété (non atomique, faible) <DelegateViewProtocol> Identifiant déléguée;
  3. Je l'appelle mon protocole
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @ Protocole DelegateViewProtocol;
    UIView { @ Interface DelegateView: UIView {
    @ Privé
    __weak Identifiant <DelegateViewProtocol> déléguée;
    }
    nonatomic, weak ) id<DelegateViewProtocol> delegate; @ Propriété (non atomique, faible) <DelegateViewProtocol> Identifiant déléguée;
    @ Fin

    @ Protocole DelegateViewProtocol <NSObject>
    @ Option
    void ) messaggio; - (Void) un message;
    @ Fin
  4. Dans le contrôleur de vue, j'ai inclus la classe UIView
    1
    # Import "DelegateView.h"
  5. J'ai adopté le Protocole
    1
    2
    3
    # Import "DelegateView.h"
    UIViewController <DelegateViewProtocol> @ Interface ViewController: UIViewController <DelegateViewProtocol>
    @ Fin
  6. J'ai créé la UIView et je me suis montré comme un délégué
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void ) viewDidLoad - (Void) viewDidLoad
    {
    ; [Super viewDidLoad];
    / / Faire aucune configuration supplémentaire après le chargement de la vue, généralement à partir d'un TR.

    [ [ DelegateView alloc ] initWithFrame : CGRectMake ( 100 ., 100 ., 300 ., 300 . ) ] ; DelegateView Dview * = [[DelegateView alloc] initWithFrame: CGRectMake (.... 100, 100, 300, 300)];
    dView ] ; [Self.view addSubview: Dview];
    dView.delegate = self;
    }
  7. Lorsque vous cliquez sur le bouton de la UIView
    1
    2
    3
    4
    5
    6
    void ) buttonDidClicked : ( UIButton * ) sender - (Void) buttonDidClicked: (UIButton *) sender
    {
    delegate && [ delegate respondsToSelector : @selector ( messaggio ) ] ) { if (&& des délégués [délégué respondsToSelector: @ selector (message)]) {
    ; [Message délégué];
    }
    }
  8. Le message est reçu dans le dispositif de commande d'affichage
    1
    2
    3
    4
    5
    # Pragma mark - DelegateViewProtocol
    void ) messaggio - Message (Void)
    {
    "%s" , __FUNCTION__ ) ; NSLog (@ "% s", __ FUNCTION__);
    }

Enfin, toujours penser à motifs, notifications autrement utilisent une sorte d'intermédiaire. Le délégant, en pratique, ne communique pas directement avec le délégué, mais tire profit d'une superstructure qui a la tâche de recevoir et envoyer des messages:

Notifiche

Notifications

Ici, la situation est totalement différente. En réalité, il s'agit d'un véritable délégant et délégataire. Les rôles peuvent être inversés ou les deux existent simultanément. Le centre de notification agit en tant qu'intermédiaire, reprenant les messages que les objets envoient et les transmet aux objets qui se sont inscrits pour recevoir. Donc tout le monde peut envoyer et tout le monde peut recevoir un nombre illimité.
, etc… cosa ovviamente orrenda e non proponibile. Cette situation est évidemment différente de la configuration des délégués où, comme on le voit ci-dessus, il ne peut être déléguée à délégant - vaut entrer delegate2 , delegate3 , etc ... ce qui est évidemment horrible et pas faisable.

La seule chose qu'ils ont en commun les deux approches est la possibilité, même pour le délégué du modèle, pour aboutir à un objet qui est en délègue à titre de délégué dans le même temps.

Il n'y a aucun commentaire pour cet article

Laisser un commentaire

TAG XHTML PERMIS: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> entrée du code:
 <pre></pre> // blocco generico <code></code> // blocco generico [cc_actionscript][/cc_actionscript] // Actionscript [cc_actionscript3][/cc_actionscript3] // Actionscript 3 [cc_css][/cc_css] // CSS Style Sheet [cc_html][/cc_html] // HTML [cc_js][/cc_js] // Javascript [cc_objc][/cc_objc] // Objective-C [cc_php][/cc_objc] // PHP [cc_sql][/cc_sql] // SQL