2012-10-01 73 views
6

Me sorprendió cuando la siguiente definición de un método compilado (mediante el Apple LLVM 4.1):Objective-C sintaxis del método

- (void) testMethod:someArgument { 

} 

Aviso del tipo de someArgument no se encuentra. ¿Cuál es la regla en Objective-C sobre especificar los tipos de argumentos de método?

Respuesta

7

El tipo de argumento predeterminado es id. Incluso esto se compilará:

- testMethod:someArgument { 
} 

Este es un método que toma un id como su argumento y debe devolver un id.

En realidad, ni siquiera el nombre del método es necesario:

- :someArgument { 
} 

Esto puede ser llamado como:

[self :someObject]; 

Por supuesto, todo esto es muy mala práctica y siempre se debe especificar el tipos (y los nombres).

+0

¡Interesante! Me gusta Objective-C aún más saber '-: v {}' compila :-) – SundayMonday

+2

Me niego a responder cualquier pregunta que use métodos como ese :-D – DrummerB

+1

Y si estás buscando el método más corto que compila, es probable que '-a {}' ;-) – DrummerB

2

El "tipo" en el argumento de método se utiliza para la verificación de tipos tanto por el compilador como para el paso de mensajes en tiempo de ejecución.

La forma en que se llama en su prototipo, es el equivalente a un "(id)".

Puede encontrar más información en la sección "Métodos para tomar parámetros" de Programming with Objective C document de Apple. También veo información muy útil en la sección "Mensajes de objeto" de "The Objective-C Programming Language" document.

1

El lenguaje de programación Objective-Ctells us:

Para las construcciones orientadas a objetos de Objective-C, tal como el método valores de retorno, de la identificación reemplaza int como el tipo de datos predeterminado (Para estrictamente construcciones C, como valores de retorno de función, int sigue siendo el tipo predeterminado ).

Cuestiones relacionadas