2009-05-09 17 views
7

Si inicializa un NSMutableArray con el método de conveniencia de NSArray como el anterior, ¿obtiene un NSArray o un NSMutableArray?Inicializar NSMutableArray: [NSMutableArray matriz];

¿Alguna consecuencia?

(sé que tiene NSMutableArray "arrayWithCapacity :, tengo curiosidad)

+1

Agradezco la interesante discusión a continuación para una simple pregunta. Trae algunos puntos sutiles de Cacao. –

Respuesta

11

Si inicializa utilizando:.

NSMutableArray *array = [NSMutableArray array]; 

se obtiene una NSMutableArray Una gran característica de Objective-C es que los métodos de la clase son heredados por las subclases

por lo tanto, en un método de la clase que puede hacer algo como esto:.

+(id)array { 
    return [[[self alloc] init] autorelease]; 
} 

y self harán referencia al objeto de clase donde se está ejecutando el código (NSArray o NSMutableArray).

+0

ahh, interesante. así que se refiere al Objeto de Clase: NSMutableArray. Eso tiene sentido. Me preguntaba por qué mi código no se estaba rompiendo. –

+1

Creo que en realidad harías: return [[[self alloc] init] liberación automática]; –

+0

Tienes razón, cambiaré el código de muestra. – pgb

4

Actualización: Si bien mi consejo para "probarlo usted mismo" generalmente es una buena idea, en este caso fue un poco desencadenante. Gracias a Jim en los comentarios por señalar que mi sugerencia a continuación no funciona bien para estas clases, porque las diversas formas de NSArray son implementadas por una clase de puente gratuita de CoreFoundation.

----- respuesta original Para Contexto A continuación -----

La forma más sencilla de responder a una pregunta de este tipo es para probarlo tú mismo. Intente asignar la matriz de la manera en que tenía curiosidad, luego NSLog desde su código:

NSLog (@ "Obtuvimos un% @", NSStringFromClass ([la clase Array]));

+1

Seguramente eso siempre devolvería 'NSCFArray'? –

+0

Gran punto, Jim. Me olvidé de esa peculiaridad de NSArray. Editando mi respuesta arriba. Gracias. – danielpunkass

+0

Hmmm intersesting. Entonces, ¿hasta un NSMutableArray escupirá un NSCFArray? Eso hace que sea difícil hacer una introspección y descubrir si tienes un objeto mutable antes de intentar cambiarlo. Supongo que puedes hacer RespondsToSelector en ese caso. En una nota lateral, gracias por su increíble podcast. He vuelto y escuché la mayoría de los episodios pasados ​​de tu y Manton. Bastante entretenido e informativo. –