Ricerca…


Osservazioni

Protocolli e delegati sono due concetti correlati ma diversi:

Un protocollo è un'interfaccia a cui una classe può conformarsi, il che significa che la classe implementa i metodi elencati.

Un delegato è in genere un oggetto anonimo conforme a un protocollo.

L'applicazione di Delegato chiamata Delegazione è un modello di progettazione.

Da una parte abbiamo il concetto di Eredità che crea un accoppiamento stretto tra la sottoclasse e la sua superclasse mentre il modello di progettazione della Delegazione fornisce un'alternativa per evitare questo stretto accoppiamento usando il quale possiamo creare una relazione molto più libera basata su oggetti Delegati anonimi.

Implementazione di protocolli e meccanismo di delega.

Supponiamo di avere due viste ViewA e ViewB

L'istanza di ViewB viene creata all'interno di ViewA , quindi ViewA può inviare un messaggio ViewB's , ma per il contrario deve essere implementata la delega (in modo che ViewB's istanza di delegato ViewB's possa inviare un messaggio a ViewA )

Seguire questi passaggi per implementare la delega

  1. In ViewB crea il protocollo come

     @protocol ViewBDelegate 
    
    -(void) exampleDelegateMethod;
    
     @end
    
  2. Dichiarare il delegato nella classe mittente

     @interface ViewB : UIView
     @property (nonatomic, weak) id< ViewBDelegate > delegate;
     @end
    
  3. Adotta il protocollo in Class ViewA

    @interfac ViewA: UIView < ViewBDelegate >

  4. Imposta il delegato

    -(void) anyFunction   
    {
        // create Class ViewB's instance and set the delegate
        [viewB setDelegate:self];
    }
    
  5. Implementare il metodo delegate nella classe ViewA

    -(void) exampleDelegateMethod
    {
        // will be called by Class ViewB's instance
    }
    
  6. Utilizzare il metodo nella classe ViewB per chiamare il metodo delegate come

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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow