2011-07-20 18 views
8

He estado declarando métodos privados en las extensiones de clase, de acuerdo con Best way to define private methods for a class in Objective-C.Objetivo-C: ¿Debo declarar métodos privados?

Pero, me acabo de dar cuenta de que, en Xcode 4, si dejo de lado la declaración de un método privado y simplemente lo implemento, la aplicación se compila y se ejecuta sin advertencia o error.

Entonces, ¿debería molestarme en declarar métodos privados en las extensiones de clase?

¿Por qué deberíamos declarar los métodos de todos modos? En Java, no ... tampoco en Ruby.

+1

Así no se puede conseguir Xcode autocompletar métodos a menos que se declaran. – thelaws

Respuesta

10

Una definición de método solo necesita definirse si la persona que llama se declara antes del método. Por consistencia, recomendaría definir sus métodos privados en la extensión.

-(void)somemethod 
{ 
} 

-(void)callermethod 
{ 
    //No warning because somemethod was implemented already 
    [self somemethod]; 
} 

-(void)callermethod2 
{ 
    //Warning here if somemethod2 is not defined in the header or some extension 
    [self somemethod2]; 
} 

-(void)somemethod2 
{ 
} 
+0

¿Qué categoría? –

+0

Oh, tonto yo. Gracias :) –

+0

No toda una categoría y una extensión son ligeramente diferentes. En una extensión puede agregar ivars y el compilador se queja si no implementa los métodos que declara en una extensión. Estoy seguro de que hay otras diferencias, pero estas son las que aprovecho. –

2

Esto compilar y ejecutar bien sin declaración:

- (void)foo { 
} 

- (void)bar { 
    [self foo]; 
} 

Pero última vez que revisé, esto le dará una advertencia:

- (void)bar { 
    [self foo]; 
} 

- (void)foo { 
} 

En otras palabras, es igual que en C : una declaración no es necesaria si la definición viene antes de cualquier uso. C requiere esto para evitar tener que agregar un pase adicional al compilador (uno para encontrar las funciones y luego uno para analizarlas realmente). En cuanto a si debe declararlos cuando no es necesario, depende realmente del estilo de la base de código con la que está trabajando.

En cuanto a otros idiomas que no requieren declaraciones, algunos simplemente continúan con el pase adicional, mientras que otros no necesitan saber el número y tipos de los argumentos o el tipo de retorno en tiempo de compilación (miran hacia arriba funciona en tiempo de ejecución en su lugar, o no tienen variables fuertemente tipadas para empezar, por lo que no "importa") por lo que pueden omitirlo.

Cuestiones relacionadas