No es el nombre "privado" lo que lo hace privado; los métodos son privados porque están en una categoría declarada dentro del archivo de implementación.
Hay tres usos de una categoría, cada una de las cuales se suman los métodos a una clase (nota: los métodos solamente, no Ivars)
extender una clase de cacao existentes
Esto le permite añadir su propio métodos a una clase existente. Por ejemplo, si desea extender NSString para aplicar mayúsculas especiales, podría crear una nueva clase llamada, digamos NSString + Mayúsculas. en el NSString + Capitals.h que tendría:
@interface NSString (Capitals)
-(NSString *)alternateCaps:(NSString *)aString;
@end
y en NSString + Capitals.m implementarías el método
@implementation NSString (Capitals)
-(NSString *)alternateCaps:(NSString *)aString
{
// Implementation
}
Los métodos privados en una clase
Este es lo mismo que arriba, excepto que los métodos adicionales se declaran y definen en el archivo de implementación (.m) Usualmente una forma de tener métodos privados, porque no están en el archivo .h (que es el # importado por otras clases) simplemente no son visible. En este caso, la implementación de los métodos se realiza en su propio bloque de implementación. por ejemplo
// someClass.m
@interface someClass (extension)
-(void)extend;
@end
@implementation someClass
// all the methods declared in the .h file and any superclass
// overrides in this block
@end
@implementation someClass (extension)
-(void)extend {
// implement private method here;
}
extensión de clase (Nuevo para 10.5 Leopard)
Una forma más sencilla de tener métodos privados. En este caso especial, el nombre de la categoría está vacío y los métodos privados se implementan en el mismo bloque que todos los demás métodos de clase.
// someClass.m
@interface someClass()
-(void)extend;
@end
@implementation someClass
// all the methods declared in the .h file and any superclass
// overrides in this block
// Implement private methods in this block as well.
-(void)extend {
// implement private method here;
}
@end
Aquí hay una link a la documentación de Apple en Categorías y extensiones.
No estoy de acuerdo en que deba mezclar métodos privados (categoría) con su implementación habitual. Es una cuestión de estilo, pero me gusta mantener una clara separación. –
Vale la pena señalar que la continuación de la clase (lo que usted llama una extensión de clase) es nueva en Leopard. –
@Peter. Gracias por señalar eso. @Marc. En el caso en que la categoría esté vacía, los métodos deben implementarse en el bloque principal. Sin embargo, al usar el segundo método, estoy de acuerdo en que es mejor estilo poner implementaciones de categoría en su propio bloque. – Abizern