2011-04-23 10 views
7

Duplicar posible:
Method Syntax in Objective C¿Alguien puede explicar nombres de funciones en Objective-C?

Así que estoy totalmente de obtener las funciones más comunes como:

-(void)viewDidUnload{ 

    self.controllers = nil; 
    [super viewDidUnload]; 
} 

Sin embargo procedentes de un fondo de programación diferente, a veces lucho con algo como:

-(NSInteger) tableView: (UITableView *)tableView 
numberOfRowsInSection:(NSInteger)section{ 

    return [self.controllers count]; 

} 

Entonces sé que la función devuelve un NSInteger. Sin embargo, me confundo un poco sobre cómo organizar mentalmente el resto del nombre de la función ETC. Necesito poder visualizar alguna estructura. ¿Como en este caso es el nombre de la función numberOfRowsInSection con el parámetro llamado section?

La ayuda en este asunto sería apreciada.

Respuesta

6

Usted puede pensar en él como otros lenguajes de programación examinado

[object action:var withFoo:baz] 

como

object."action:withFoo:"(var, baz) 

Todo antes de los dos puntos es parte del nombre del método, y todo lo que después es argumentos, por lo que el nombre del método se intercala con los argumentos pasados ​​al método.

+0

A pesar de que args tienen "palabras clave", el orden no puede cambiar. action y withFoo no se pueden cambiar aunque no sea realmente ambiguo. – seand

0

(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

Este es un método que acepta 2 argumentos, una UITableView y un NSInteger. Se anota así: -tableView:numberOfRowsInSection:.

0

Sí, eso es básicamente. En obj-C, los nombres completos de los métodos incluyen los nombres arg. Creo que esa convención se originó en Smalltalk.

1

Objetivo C tiene una forma descriptiva de los métodos de escritura ..

-(NSInteger) tableView: (UITableView *)tableView numberOfRowsInSection:(NSInteger)section{} 

Es un tableView métodos, devolver un NSInteger, toma dos argumentos - una referencia UITableView y una sección entera. Ahora considere numberOfRowsInSection como una descripción de lo que el argumento es todo about.Look en este ejemplo

-(NSInteger) calculateSum:(NSInteger)operand1 secondOperand:(NSInteger)operand2 andThirdOperand:(NSInteger)operand3{} 

y puedo llamar a estos métodos como [auto calculateSum: var1 secondOperand: var2 andThirdOperand: var3];

aquí "secondOperand" y "andThirdOperand" no son esenciales, puedo escribir el método anterior como

-(NSInteger) calculateSum:(NSInteger)operand1 :(NSInteger)operand2 :(NSInteger)operand3{} 

y llamar a este método como

[self calculateSum:var1 :var2 :var3]; 

Pero primero es fácil de leer, si dices qué es cada variable ...Espero que esto ayude

Véase también he utilizado el método de la palabra en lugar de las funciones que normalmente es la forma objetiva c ..

3

Sí, la forma en que Objective-C se mezcla con los argumentos de las partes el nombre del método parece raro al principio . Todos pasan por un corto período de ajuste a este respecto. Pero tómese su tiempo; después de un tiempo, quizás no quiera volver a ver una lista de parámetros sin nombre separados por comas nunca más.

En C++, que diría algo así como:

Color *color = new Color(0.5, 0.7, 0.2, 0.8); 

Usted sabe lo que significan esos valores, ¿verdad? Hay cuatro de ellos, así que obviamente los parámetros están en rojo, verde, azul, orden alfa. ¿O era alfa, rojo, verde, azul? Por supuesto, también podría ser matiz, saturación, valor, alfa ... bueno, realmente no importa porque siempre puedes buscarlo.

En Objective-C, que dice:

UIColor *color = [[UIColor alloc] initWithRed:0.5 green:0.7 blue:0.2 alpha:0.8]; 

No es eso mejor? Definitivamente, necesitará consultar la documentación de vez en cuando para recordarse exactamente qué hace un método o qué métodos pone a disposición una clase. Pero a menudo no se encontrará consultando los documentos solo para descubrir qué parámetro va a dónde.

Cuestiones relacionadas