objective c - ¿Debe una propiedad NSString bajo ARC ser fuerte o copiar?
objective-c cocoa-touch (4)
Copiar y ARC son ortogonales: haces copias de objetos mutables para "congelar" su estado; ARC realiza un seguimiento del recuento de referencias del objeto.
NSString
objetos NSString
pueden ser o no mutables. Cuando recibe un NSString*
como parámetro, no puede estar seguro de que sea inmutable a menos que verifique su tipo (e incluso entonces puede obtener falsos positivos). Si su algoritmo se basa en que la cadena no cambia después de haberse establecido, hacer una copia es lo correcto. ARC, por otro lado, se asegurará de que el objeto no se libere mientras está haciendo una fuerte referencia a él.
Cuando no se está compilando con ARC, se recomienda usar propiedades de copy
para tipos de datos como NSString
. No pude encontrar la documentación adecuada sobre el uso de la copy
en modo ARC. ¿Puede alguien decirme qué es aplicable para ARC?
No importa si usa ARC o no ARC .
El razonamiento detrás de la copy
es para que pueda garantizar que el estado interno de su clase no se puede modificar desde fuera de la implementación.
Esto podría suceder si alguien le pasa un NSMutableString
y luego lo modifica más adelante. Esa consideración es independiente del entorno de gestión de memoria.
Todavía se recomienda copiar porque quieres evitar que algo pase una cadena mutable y luego cambiarla sin que lo sepas. Una copia garantiza que la cadena que tiene no cambiará.
copy
cuenta como strong
. Utilizar:
@property (nonatomic, copy) NSString * name;
https://devforums.apple.com/message/654033#654033
o incluso:
@property NSString * firstName;