Suche…


Bemerkungen

Protokolle und Delegierte sind zwei verwandte, aber unterschiedliche Konzepte:

Ein Protokoll ist eine Schnittstelle, der eine Klasse entsprechen kann. Das bedeutet, dass die Klasse die aufgelisteten Methoden implementiert.

Ein Delegat ist normalerweise ein anonymes Objekt, das einem Protokoll entspricht.

Die Anwendung von Delegat namens Delegation ist ein Entwurfsmuster.

An einem Ende haben wir das Konzept der Vererbung , das eine enge Kopplung zwischen der Unterklasse und ihrer Oberklasse herstellt, während das Delegierungsentwurfsmuster eine Alternative darstellt, um diese enge Kopplung zu vermeiden, mit der wir eine viel lockerere Beziehung auf Basis anonymer Delegate- Objekte erstellen können.

Implementierung von Protokollen und Delegierungsmechanismus.

Angenommen, Sie haben zwei Ansichten, ViewA und ViewB

Die ViewB Instanz wird in ViewB erstellt. In ViewA ViewA kann ViewA eine Nachricht an die ViewB's Instanz senden. ViewB's dies zu tun, müssen Sie jedoch die Delegierung implementieren (damit die ViewB's Instanz mit ViewB's Instanz die Nachricht an ViewA senden ViewA

Führen Sie die folgenden Schritte aus, um die Delegierung zu implementieren

  1. In ViewB erstellen Sie das Protokoll als

     @protocol ViewBDelegate 
    
    -(void) exampleDelegateMethod;
    
     @end
    
  2. Deklarieren Sie den Delegierten in der Senderklasse

     @interface ViewB : UIView
     @property (nonatomic, weak) id< ViewBDelegate > delegate;
     @end
    
  3. Übernehmen Sie das Protokoll in Class ViewA

    @interfac ViewA: UIView < ViewBDelegate >

  4. Stellen Sie den Delegierten ein

    -(void) anyFunction   
    {
        // create Class ViewB's instance and set the delegate
        [viewB setDelegate:self];
    }
    
  5. Implementieren Sie die Delegat-Methode in der Klasse ViewA

    -(void) exampleDelegateMethod
    {
        // will be called by Class ViewB's instance
    }
    
  6. Verwenden Sie die Methode in der Klasse ViewB , um die Delegate-Methode als aufzurufen

    -(void) callDelegateMethod
    {
        [delegate exampleDelegateMethod];
        //assuming the delegate is assigned otherwise error
    }
    


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow