subclases Manzanas clases de colección no es tan difícil - si se utiliza un pequeño truco (véase también: cocoawithlove).
Una subclase es una relación "is-a" en el diseño orientado a objetos. Pero también hay relaciones "has-a", es decir, envoltorios.
Si intentas crear una subclase de NSArray utilizando una relación pura es, supongo que sería un poco difícil, ya que tendrías que hacer una gestión de memoria de nivel C.
Pero si agrega una relación has-a - o: cree un contenedor - al mismo tiempo, puede hacer el subcalssing con bastante facilidad: Simplemente haga que su clase de matriz personalizada tenga un miembro de un NSArray normal. Ahora anule su método reenviando las llamadas al objeto miembro.Mostré esto in this post, where I just add objects, that pass a certain test.
Pero verá que no implementé el método del que habló correctamente, pero me genera un error. La razón es: ese método es un método variadic, que tiene una cantidad variable de objetos que puede pasar, y para manejar esto, debe trabajar un poco. cocoawithlove has an great article about it.
Para que - si se utiliza que tiene-un truco - que podría parecerse a
- (id) initWithObjects:(id)firstObj, ... {
if (self = [super init]) {
_realArray = [[NSMutableArray alloc] initWithCapacity:1];
}
va_list args;
va_start(args, firstObj);
for (id obj = firstObj; obj != nil; obj = va_arg(args, id))
{
[self.realArray addObject:obj];
}
va_end(args);
return self;
}
resolviste el problema delegado, pero todavía hay una advertencia de falta de centinela ... –
Intenté 'self = [super initWithObjects: firstObj, nil];' y la advertencia desapareció, pero ¿faltará el objeto dentro de la matriz? cuando se llama a esta subclase? –
Sí, lo siento, debe agregar nil al final. Lo siento pero no entiendo tu pregunta ... – Saphrosit