Cuando no se está compilando con ARC, se recomienda utilizar las propiedades copy
para tipos de datos como NSString
. No pude encontrar la documentación adecuada sobre el uso de copy
en modo ARC. ¿Puede alguien decirme qué es aplicable para ARC?¿Debe una propiedad NSString bajo ARC ser fuerte o copiar?
Respuesta
Todavía se recomienda copiar porque desea evitar que algo pase una cadena mutable y luego cambiarla sin que usted lo sepa. Una copia garantiza que la cadena que tiene no cambiará.
Tenga en cuenta que cuando digo "garantizar" me refiero al código que se ajusta a las mejores prácticas de Objective-C. No puedo dar cuenta de un programador deshonesto que cree que es inteligente agregar el método 'copy' a una categoría' NSString', por ejemplo. – Joe
explicación increíble hombre ... !! –
¿qué tal 'NSMutableArray' debería usar copia para él. –
No importa si está usando ARC o no-ARC.
El razonamiento detrás de 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.
Copiar y ARC son ortogonales: realiza copias de objetos mutables para "congelar" su estado; ARC realiza un seguimiento del recuento de referencias del objeto.
NSString
objetos pueden o no ser 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.
copy
cuenta como strong
. Use:
@property (nonatomic, copy) NSString * name;
https://devforums.apple.com/message/654033#654033
o incluso:
@property NSString * Nombre;
El primer enlace no es accesible para mí, ¿alguien puede citar la publicación exacta en el enlace? – CyberMew
- 1. ARC error Enumeración propiedad Fuerte
- 2. Propiedad NSArray: ¿copiar o conservar?
- 3. Aclaración sobre asignar, retener, copiar, fuerte?
- 4. IBOutlet y viewDidUnload bajo ARC
- 5. Ninject, Bind debe ser .InRequestScope() O .InSingletonScope()
- 6. ¿Cómo creo un NSString CFUUID bajo ARC que no tiene fugas?
- 7. Propiedad vs ivar en tiempos de ARC
- 8. @property definiciones con ARC: ¿Es fuerte por defecto ahora?
- 9. ¿Por qué se usa una palabra clave "fuerte" en una propiedad en un entorno que no es de ARC?
- 10. Debe copiar el constructor sea privado o público
- 11. ¿Se ha lanzado un NSString literal o se debe lanzar?
- 12. Error: se debe especificar una propiedad o función url
- 13. Se debe especificar una propiedad o función 'url' en Backbone.js
- 14. Obteniendo "Se esperaba un atributo de propiedad antes de 'fuerte'" al compilar un archivo ARC con LLVM-GCC
- 15. ARC o no a ARC iphone iOS5
- 16. ¿cuán corto debe ser una función?
- 17. débil o fuerte para IBOutlet y otros
- 18. ¿Qué propiedad debo usar para una Cola de despacho después de ARC?
- 19. "Membership.Provider debe ser una instancia de ExtendedMembershipProvider"
- 20. NSInteger, NSNumber "propiedad" x 'con' retención 'atributo debe ser del tipo de objeto "
- 21. Comenzando con Objective-C: ¿ARC o no a ARC?
- 22. Nuevos atributos de propiedades ARC
- 23. ¿La etiqueta raíz de Silverlight debe ser UserControl o Canvas?
- 24. ¿Debe la autorización ser parte del modelo o controlador?
- 25. Conectar por árbol anterior debe ser simétrico
- 26. Obligar a un objeto a desasignar bajo ARC
- 27. Asp .Net MVC Viewmodel debe ser de clase o struct?
- 28. clase inmutable debe ser definitiva?
- 29. En XCode 4.3.2, cuando ejecuto la herramienta de refactorización de conversión ARC, todas mis opciones de propiedad que fueron "retenidas" NO se cambian a "fuerte"
- 30. ¿Debe un desarrollador ser diseñador?
¿Qué estás tratando de hacer? Muestre una pieza de código de ejemplo donde desee conocer el método adecuado para seguir. – Dustin