¿Quién puede decirme la diferencia entre la asignación y la copy de NSArray?

1.Assignment

NSArray* a = xxxxxx; NSArray* b; b = a; 

2.Copia

 NSArray* a = xxxxxx; NSArray* b; b = [a copy]; 

Sé que la copy es "copy ligera", la copy mutable es "copy profunda".

la copy es dirección de memory de copy, y la copy mutable es copyr objects de memory.

Pero no sé cuál es la asignación y la copy diferente.

¿Es lo mismo?

Esta documentation de Apple es útil:

La copy normal es una copy superficial que produce una nueva colección que comparte la propiedad de los objects con el original. Las copys profundas crean objects nuevos a partir de los originales y los agregan a la nueva colección.

Por lo tanto, en su primer ejemplo, b apunta a la misma instancia de NSArray como a . En el segundo ejemplo, b apunta a una nueva instancia de NSArray que contiene references a los mismos objects contenidos en la matriz apuntada por a .

b = a; b está señalando la misma dirección donde hay puntos. Entonces, cambiar cualquiera será igual. Esto se llama como call by reference .

b = [a copy]; está creando otro object de a y eso es apuntado por b . Aquí se forman dos sets diferentes de objects, por lo que cambiar cualquiera de ellos será independiente uno del otro. Esto es como una call by value . Y aquí b tendrá una copla inmutable de a , incluso si a fuese mutable.