Zoeken…


Opmerkingen

Protocollen en gedelegeerden zijn twee verwant maar verschillend concept:

Een protocol is een interface waaraan een klasse kan voldoen, wat betekent dat klasse de vermelde methoden implementeert.

Een gemachtigde is meestal een anoniem object dat voldoet aan een protocol.

De toepassing van Delegate genaamd Delegation is een ontwerppatroon.

Aan de ene kant hebben we het concept van overerving dat een nauwe koppeling tussen de subklasse en de superklasse creëert, terwijl het ontwerppatroon van de delegatie een alternatief biedt om deze nauwe koppeling te voorkomen, waardoor we een veel lossere relatie kunnen creëren op basis van anonieme gedelegeerde objecten.

Implementatie van protocollen en delegatiemechanismen.

Stel dat u twee weergaven ViewA en ViewB

Exemplaar van ViewB wordt in ViewA , zodat ViewA een bericht naar ViewB's instantie van ViewA kan verzenden, maar andersom moeten we delegatie implementeren (zodat het gebruik van ViewB's instantie van ViewA een bericht naar ViewA kon verzenden)

Volg deze stappen om de delegatie te implementeren

  1. Maak in ViewB protocol als

     @protocol ViewBDelegate 
    
    -(void) exampleDelegateMethod;
    
     @end
    
  2. Verklaar de afgevaardigde in de afzenderklasse

     @interface ViewB : UIView
     @property (nonatomic, weak) id< ViewBDelegate > delegate;
     @end
    
  3. Gebruik het protocol in Class ViewA

    @interfac ViewA: UIView < ViewBDelegate >

  4. Stel de gemachtigde in

    -(void) anyFunction   
    {
        // create Class ViewB's instance and set the delegate
        [viewB setDelegate:self];
    }
    
  5. Implementeer de delegate-methode in de klasse ViewA

    -(void) exampleDelegateMethod
    {
        // will be called by Class ViewB's instance
    }
    
  6. Gebruik de methode in de klasse ViewB om de gedelegeerde methode als aan te roepen

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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow