Perché utilizzare il protocollo, non chiamare direttamente il metodo?

3

Mi è stata fatta questa domanda in un'intervista. Ad esempio: il protocollo UITableviewDelegate ha CellForRowAtIndexpath . Perché renderlo un metodo delegato in un protocol non un metodo nella classe UITableView e chiamarlo direttamente?

    
posta user96307 10.07.2013 - 23:58
fonte

3 risposte

4

I protocolli vengono utilizzati per definire un insieme di metodi per interagire indipendentemente dal tipo di oggetto che li implementa. Consente di interscambiare facilmente le risorse esterne con cui interagisce la vista e riduce l'accoppiamento generale del codice. Questo è in contrasto con il chiamare direttamente la risorsa con la conoscenza del suo tipo.

    
risposta data 11.07.2013 - 04:52
fonte
1

Non inserendo il - [tableView: cellForRowAtIndexPath:] nella classe UITableViewController, si può scrivere un'altra classe da utilizzare come origine dati (cellForRow è nell'origine dati). Questo può essere utile per l'organizzazione del codice o il riutilizzo del codice.

Inserendolo in un protocollo, la classe può avere qualsiasi superclasse: utile quando sottoclassi le proprie origini dati o delegati. Dà anche la possibilità di aggiungere l'origine dati ovunque tu voglia, anche nel delegato dell'app o in una sottoclasse della vista (non farlo).

    
risposta data 10.08.2013 - 01:17
fonte
0

Ecco cosa Apple ha da dire al riguardo :

Delegation

Delegation is a mechanism by which a host object embeds a weak reference (weak in the sense that it’s a simple pointer reference, unretained) to another object—its delegate—and periodically sends messages to the delegate when it requires its input for a task. The host object is generally an “off-the-shelf” framework object (such as an NSWindow or NSXMLParser object) that is seeking to accomplish something, but can only do so in a generic fashion. The delegate, which is almost always an instance of a custom class, acts in coordination with the host object, supplying program-specific behavior at certain points in the task. Thus delegation makes it possible to modify or extend the behavior of another object without the need for subclassing.

Quindi, in questo caso, si desidera fornire una cella personalizzata, ma non si desidera creare una sottoclasse di UITableView per farlo. Qualsiasi classe conforme al protocollo può fornire la cella personalizzata.

    
risposta data 10.08.2013 - 02:26
fonte

Leggi altre domande sui tag