2010-05-26 16 views
5

Estoy trabajando en un libro de desarrollo de iPhone * sin conocer realmente el Objetivo C. En general, puedo seguir lo que está sucediendo, pero hay algunas declaraciones de métodos como el de abajo que estoy teniendo problemas para analizar. Por ejemplo:¿Puede alguien explicar esta sintaxis de declaración del método Objective C?

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

Parece que este es un método llamado numberOfRowsInSection, y devuelve un NSInteger, y toma un NSInteger como un parámetro que se denomina localmente 'sección'. Pero no entiendo todas las referencias a tableView, o por qué esto toma un parámetro cuando no se usa dentro del método. ¿Alguien puede aclarar esto? Gracias.

* p. 258, A partir iPhone 3 Desarrollo, por Mark y LaMarche, publicado por Apress

Actualización: pude encontrar otro SO hilo que va en un poco más de detalle: Method Syntax in Objective C

+0

Primero debes aprender Objective-C, no te arrepentirás. Lee este libro y haz todos los ejercicios: http://www.amazon.com/dp/0321566157 –

Respuesta

4

Este es un método llamado:

tableView:numberOfRowsInSection: 

Se necesitan dos parámetros:

  • un UITableView*
  • un NSInteger

El método también tiene un self parámetro implícito, que es la instancia que se llama con. Como notas de dreamlax, también toma implícita _cmd, que es el método que actualmente se invoca.

Como dice Mark, es completamente común no usar ciertos parámetros si se está adaptando a una determinada interfaz.

+0

Y un parámetro implícito '_cmd' que rara vez se usa. – dreamlax

+0

¿Para qué sirve el parámetro _cmd? – Shiki

+1

@Shiki: Creo que el argumento '_cmd' indica el selector que se usó para resolver la implementación del método. En situaciones excepcionales en las que se comparte la misma implementación de método entre múltiples selectores, el argumento '_cmd' se puede usar para distinguir cómo se invocó la implementación del método. Además de manipular el tiempo de ejecución, nunca he usado '_cmd'. – dreamlax

1

Este método es conforme a la UITableViewDataSource protocolo. Si está familiarizado con C# o Java, un protocolo es como interface.

Es completamente legal y no demasiado anormal que un método conforme a una interfaz o protocolo ignore algunos de los argumentos.

2

Este es un método llamado tableView:rowsInSection: que UITableView especifica para sus delegados. El argumento tableView está ahí en caso de que tenga un controlador a cargo de varias UITableViews, para que pueda ver cuál está hablando con él. También es útil si necesita consultar la información de UITableView para decidir qué desea hacer. Esto es muy común en los métodos de delegado.

Cuestiones relacionadas