Objective-C Language
Protokoll och delegater
Sök…
Anmärkningar
Protokoll och delegater är två relaterade men olika begrepp:
Ett protokoll är ett gränssnitt en klass kan uppfylla, vilket innebär att klassen implementerar de listade metoderna.
En delegat är vanligtvis ett anonymt objekt som överensstämmer med ett protokoll.
Tillämpningen av delegat som kallas delegation är ett designmönster.
I ena änden har vi begreppet ärft som skapar en tät koppling mellan underklassen och dess superklass medan Delegations designmönster ger ett alternativ att undvika denna täta koppling med vilket vi kan skapa ett mycket lösare förhållande baserat på anonyma delegerade objekt.
Implementering av protokoll och delegeringsmekanism.
Anta att du har två vyer ViewA
och ViewB
Instansen av ViewB
skapas i ViewA
, så ViewA
kan skicka meddelande till ViewB's
instans, men för att det omvända ska hända måste vi implementera delegering (så att använda delegat ViewB's
instans kan skicka meddelande till ViewA
)
Följ dessa steg för att genomföra delegationen
ViewB
protokoll iViewB
som@protocol ViewBDelegate -(void) exampleDelegateMethod; @end
Förklara delegaten i avsändarklassen
@interface ViewB : UIView @property (nonatomic, weak) id< ViewBDelegate > delegate; @end
Anta protokollet i Class ViewA
@interfac ViewA: UIView < ViewBDelegate >
Ställ in delegaten
-(void) anyFunction { // create Class ViewB's instance and set the delegate [viewB setDelegate:self]; }
Implementera
ViewA
i klassenViewA
-(void) exampleDelegateMethod { // will be called by Class ViewB's instance }
Använd metoden i klassen
ViewB
att kallaViewB
som-(void) callDelegateMethod { [delegate exampleDelegateMethod]; //assuming the delegate is assigned otherwise error }