2009-06-14 12 views
7

Quando si scrive Cocoa e si implementa un metodo di classe che accetta un delegato e uno o più selettori da utilizzare per i suoi callback, la terminologia cambia da "delegato" e "selettore" a "destinazione" e "azione"? Più precisamente, il "delegato" è limitato a quando la mia classe è quella che ottiene chiamata, ma non quando la mia classe è facendo la chiamata?Esiste una differenza tra delegato/selettore e destinazione/azione?

risposta

12

I delegati vengono solitamente implementati utilizzando Protocols anziché i selettori. Questo è un modo più formale di comunicare attraverso le classi ed è utile soprattutto quando c'è più di un metodo che potrebbe essere necessario.

Obiettivo/Azione sono generalmente utilizzati per corrispondere ad una situazione di "evento-like", come ad esempio un click, una cottura timer, ecc

+0

ho capito ora - sto facendo male. Questo sarebbe il motivo per cui è fonte di confusione per me :) anche di assistenza era questa pagina, che copre l'errore "methodName non nel protocollo" Mi sono imbattuto in quasi subito: http://www.mobileorchard.com/idprotocol-retainrelease-and -Protocollo-eredità / –

3

Per approfondire la risposta di NilObject, i delegati sono implementati tramite protocolli con una serie di metodi "standardizzati". Se si dispone di più oggetti ciascuno della stessa classe che condivide lo stesso delegato, non sarà possibile distinguere tra il mittente. Quindi vedi - (void) delegateCallback: (id) mittente il puntatore del mittente ti permette di fare questa associazione.
Per fare questo confronto sarà richiesto un riferimento al mittente come proprietà o variabile globale, questo rende anche più facile se si sta rilasciando manualmente il proprio oggetto in quanto è possibile impostare le proprietà degli oggetti su zero prima di rilasciare (per evitare i "garbage point").

In alternativa è possibile utilizzare il metodo di selezione per passare il proprio metodo per la richiamata, questa tecnica è buona in quanto non è necessario il riferimento per un confronto con il mittente: (id) e si può avere un callback del metodo per ogni oggetto che si inizializza. Il rovescio della medaglia significa che se si rilascia questo oggetto non sarà possibile impostare le proprietà su zero.

1

Penso che ci sia una differenza a livello di progettazione.

Prendiamo un componente che è specializzato per fare alcune cose. Sia Delegation e faciliterebbero (qualche forma di) comunicazione tra il nostro componente e l'oggetto che lo consuma.

Di solito, quale forma di comunicazione si desidera definisce se utilizzare Target Action o Delegation.

1. Che cosa viene comunicato?

destinazione azione è più adatto quando la comunicazione è limitata a controllo (eventi, stato, ecc)

delegazione è molto più flessibile e ha applicazioni larghe. Quindi posso utilizzare la delega per inviare e ricevere dati tra 2 oggetti.

2. Come

Finora ho visto Azione Target per lo più manifesta 1-Way comunicazione

Con delegazione ho io fatto 2-Way comunicazione avendo metodi quei valori di ritorno.

0
Target - the object which is going to respond for your action. 
Action - the method which is triggered by your action 
Delegates - Majorly used for callback mechanism, implemented using "@protocols". 
Selector - also can be used as callback method:

Esempio:

SEL mySelector = @selector(myTimerCallback:); 
    [NSTimer scheduledTimerWithTimeInterval:30.0 target:obj selector:mySelector userInfo:nil repeats:YES]; 
Problemi correlati