2012-07-25 11 views
7

Sto esaminando le convenzioni di denominazione per i delegati dei controlli iOS. Conosco lo should, will, did pattern for delegate methods. Riesco a vedere questa convenzione di denominazione ampiamente utilizzata dalle API Apple. La mia domanda è: ci sono delegati forniti da Apple che hanno dovuto, avrebbero fatto i metodi per una singola azione? per esempio. per selezione riga:Convenzioni di denominazione dei delegati iOS: dovrebbe, lo ha fatto,

shouldSelectRow 
willSelectRow 
didSelectRow 

Non ho trovato un delegato che definisce tutti e tre. La mia sensazione è che i metodi "volontà" siano spesso usati al posto di dovrebbero, cioè possono restituire un valore per annullare l'azione.

Esistono contro-esempi?

+2

Penso che l'hai capovolto - "dovrebbe" dovrebbe restituire un valore booleano che dice al mittente di procedere o meno. Ti dirà che accadrà e non ci accorgerai che puoi fare qualcosa. Ti ha permesso di agire dopo che è successo. Il mio $ 0,02 –

+0

Unisco l'uso di volontà e dovrebbe, così viene chiamato, ma con l'opzione di restituire NO se non vuoi che la modifica vada avanti. Il metodo dovrebbe non ha senso per me. È solo un overhead in più. –

+0

@DavidH era la mia comprensione iniziale, tuttavia, il metodo 'UITableViewDelegate'' tableView: willSelectRowAtIndexPath' può restituire un valore che annulla la selezione. In altre parole, esegue la responsabilità "dovrebbe". – ColinE

risposta

1

I metodi restituiscono sempre un valore BOOL e indicano il comportamento corrente di un oggetto (ma non vengono mai chiamati automaticamente). Saranno i metodi sono metodi delegato che vengono chiamati quando un evento sta per accadere, come

-(void)applicationWillResignActive... 

e "fatto" metodi sono anche delegare metodi che vengono chiamati dopo l'evento ha avuto luogo, come appplicationDidFinishLaunching ...

+0

quindi vuoi dire dovrebbe essere chiamato manualmente? – OMGPOP

+0

Voglio dire, i metodi dovrebbero sempre essere chiamati a "chiederti" se qualcosa dovesse accadere o meno. Ad esempio, questa funzione - (BOOL) textField: (UITextField *) textField shouldChangeCharactersInRange: (NSRange) range replacementString: (NSString *) stringa; consente di decidere se i caratteri in tale intervallo devono essere modificati o meno. Il codice nella funzione prenderà solo questa decisione e restituirà SÌ o NO. –

Problemi correlati