viernes, 18 de febrero de 2011

Conceptos Fundamentales - Categorías y Extensiones

Categorías

Una categoría permite añadir nuevos métodos a clases ya existentes sin crear subclases. Lo que no se puede es agregar variables de instancia para esa clase.
Para una categoría tenemos dos archivos que son los mismos que para una clase, la interfaz que consiste en un archivo .h y la implementación que consiste en el archivo .m .

La diferencia que existe con una clase es que, las categorías:
1 - Tienen un nombre de una clase ya existente como por ej NSObject
2 - En la interfaz no indicamos de quien heredamos
3 - En la intefaz como en la implementación el nombre de la categoría va entre paréntesis

No se puede usar @sintetize
El nombre del archivo de una categoría es el de la clase seguido de la categoría.

Las categorías son muy útiles cuando se quiere agregar funcionalidad a una clase, pero no queremos reescribirla o no contamos con el código fuente el código fuente de la clase como cuando esta se encuentra en una biblioteca.

Por ejemplo:

Supongamos que tenemos la clase Perro y agregamos la categoría PerroTrucos
//  Perro.h
@interface Perro : NSObject{
}
-(void) ladra;
@end


//  Perro.m
#import "Perro.h"
@implementation Perro
-(void) ladra {
        //Guau guau
}
@end


//  PerroTrucos.h
@interface Perro (Trucos) {
}
-(void) traeLaVarita;
@end


//  Perro.m
#import "PerroTrucos.h"
@implementation Perro (Trucos)
-(void) traeLaVarita {
 //va por la varita
}
@end

Para crear una categoría, se debe declarar con @interface NombreDeClaseExistente (NombreDeCategoriaNueva)
Una vez declarada la categoría se define con @implementation NombreDeClaseExistente (NombreDeCategoriaNueva)

Extensiones
La extensión es un caso especial de categoría a la cual no se le da un nombre entre parentesis, es anonima.
Sus métodos se implementan en la implementación principal de nuestra clase para que puedan definir metodos privados.

No hay comentarios: