copy vs properties fuertes

Estoy más fresco en iOS y quiero saber que cuando deberíamos usar la copy en una propiedad, por ej.

 @property (nonatomic, retain) NSString* name; 

vs

 @property (nonatomic, copy) NSString* name;` 

¿Cuál es la diferencia entre retain y copy , y cuándo debo usar uno pero no el otro?

 @property (nonatomic, copy) NSString* name; 

es mejor, ya que NSString es inmutable y su class secundaria NSMutableString es mutable.

Mientras esté utilizando NSString durante todo el process, no verá ninguna diferencia. Pero cuando comienzas a usar NSMutableString , las cosas pueden ser poco complicadas.

 NSMutableString *department = [[NSMutableString alloc] initWithString:@"Maths"]; Person *p1 = [Person new]; p1.department = department; //Here If I play with department then it's not going to affect p1 as the property was copy //eg [department appendString:@"You're in English dept."]; 

Si hubiera sido simplemente retener, habría cambiado el departamento de la p1 . Entonces, tener copy es preferible en este caso.

Si NSString es mutable , se copied . Si no es así, se retained Si va a utilizar una copy , se creará una nueva copy de la cadena y, por lo tanto, otra dirección de memory diferente. Mientras que, si va a usar retain , estará en la misma dirección de memory, solo cambiará el contador retener.