2010-05-26 12 views
5

Sto lavorando attraverso un libro di sviluppo iPhone * senza conoscere veramente l'obiettivo C. Per la maggior parte sono in grado di seguire ciò che sta accadendo, ma ci sono alcune dichiarazioni di metodo come quello sotto che sto avendo un po 'di problemi nell'analisi. Per esempio:Qualcuno può spiegare questa sintassi della dichiarazione del metodo Objective C

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger) section { 
    return [self.controllers count]; //controllers is an instance variable of type NSArray in this class 
} 

E sembra che questo è un metodo chiamato numberOfRowsInSection, e restituisce un NSInteger, e prende un NSInteger come un parametro che viene localmente chiamato 'la sezione'. Ma non capisco tutti i riferimenti a tableView, o perché questo prende un parametro quando non viene utilizzato all'interno del metodo. Qualcuno può chiarirlo? Grazie.

* p. 258, Cominciando iPhone 3 Development, da Mark e LaMarche, edito da Apress

Aggiornamento: sono stato in grado di trovare un altro SO filo che va in un po 'più in dettaglio: Method Syntax in Objective C

+0

Dovresti prima imparare Objective-C, non te ne pentirai. Leggi questo libro e fai tutti gli esercizi: http://www.amazon.com/dp/0321566157 –

risposta

4

Questo è un metodo chiamato:

tableView:numberOfRowsInSection: 

Richiede due parametri:

  • un UITableView*
  • un NSInteger

Il metodo prevede inoltre un parametro implicito self, che è l'istanza in cui è chiamato con. Come note di dreamlax, prende anche un implicito _cmd, che è il metodo che viene attualmente invocato.

Come dice Mark, è completamente comune non utilizzare determinati parametri se si è conformi a una determinata interfaccia.

+0

E un parametro implicito '_cmd' che raramente viene usato. – dreamlax

+0

Per che cosa è il parametro _cmd? – Shiki

+1

@Shiki: Penso che l'argomento '_cmd' indichi il selettore utilizzato per risolvere l'implementazione del metodo. In rari casi in cui la stessa implementazione del metodo è condivisa tra più selettori, l'argomento '_cmd' può essere utilizzato per distinguere il modo in cui è stata richiamata l'implementazione del metodo. A parte il rancore di runtime, non ho mai usato effettivamente '_cmd'. – dreamlax

1

Questo metodo è conforme alla Protocollo UITableViewDataSource. Se hai familiarità con C# o Java, un protocollo è come un interface.

È completamente legale e non troppo anormale per un metodo conforme a un'interfaccia o un protocollo per ignorare alcuni degli argomenti.

2

Questo è un metodo chiamato tableView:rowsInSection: che UITableView specifica per i suoi delegati. L'argomento tableView è presente nel caso in cui un controller sia responsabile di più UITableViews, in modo che sia in grado di dire a chi sta parlando. È anche utile se hai bisogno di interrogare UITableView per informazioni al fine di decidere cosa vuoi fare. Questo è molto comune nei metodi delegati.

Problemi correlati