Diferencia entre literales y métodos de clase para NSMutableArray y NSMutableDictionary [duplicado]

Esta pregunta ya tiene una respuesta aquí:

¿Es la creación literal de un NSMutableDictionary menos eficiente que el método de ayuda de clase? 1 respuesta

Cuando comencé con OSX / iOS utilicé

    NSMutableArray *        a1 = [NSMutableArray arrayWithCapacity:123] ;
    NSMutableDictionary *   d1 = [NSMutableDictionary dictionaryWithCapacity:123] ;

Entonces descubrí la versión 'más simple'

    NSMutableArray *        a2 = [NSMutableArray array] ;
    NSMutableDictionary *   d2 = [NSMutableDictionary dictionary] ;

Ahora me he mudado a:

    NSMutableArray *        a3 = [@[] mutableCopy] ;
    NSMutableDictionary *   d3 = [@{} mutableCopy] ;

Funcionalmente, todos parecen idénticos: una vez inicializados de cualquier manera, se pueden usar independientemente de cómo se crearon. ¿Dónde están las diferencias?

En particular, ¿debería suponer que d3 / a3 es más similar a d2 / a2 que a d1 / a1 en términos de asignación previa de memoria (o falta de ella)?

¿O es solo una cuestión de estilo?

Respuestas a la pregunta(3)

Su respuesta a la pregunta