Si entiendo esto correctamente, copy
obliga al colocador a crear una copia del objeto pasado. Sin embargo, si lo uso junto con readonly
, no habrá un colocador. Entonces, ¿mi suposición es correcta, que combinar @property (copy, readonly)
no tiene ningún sentido o me falta algo?¿@property copy en combinación con readonly tiene sentido?
Respuesta
Tiene sentido. Por ejemplo, si desea acceder a seleccionador de propiedades sólo en su aplicación:
@interface MyClass : NSObject
@property (nonatomic, copy, readonly) NSData *data;
- (id)initWithData:(NSData *)data;
@end
y en la continuación de clase en el archivo .m
:
@interface MyClass()
@property (nonatomic, copy, readwrite) NSData *data;
@end
Tenga en cuenta que la declaración copy, readonly
en la cabecera pública es requerido en este caso!
Se aplican las mismas consideraciones si una subclase desea redeclarar una propiedad 'readonly' definida en la superclase como' readwrite' en su propia implementación. – Monolo
Este es un caso especial bastante raro en mi experiencia, sin embargo, tiene toda la razón (ambos), en este caso tan especial, uno necesita 'copy' incluso para una propiedad de solo lectura. – Mecki
Tiene razón, no tiene sentido tener ambas.
Según Apple's documentation (que yo he vinculado a su disposición):
copy
Especifica que una copia del objeto se debe utilizar para la asignación.El valor anterior se envía un mensaje
release
.La copia se realiza invocando el método
copy
. Este atributo es válido solo para tipos de objetos, que deben implementar el protocoloNSCopying
.
Así que sí, tiene usted razón ... readonly
crea un método getter y copy
se ignoraría de manera efectiva, ya que no hay método de selección que hace la asignación.
Esta debería ser la respuesta aceptada ... ya que en realidad _ responde_ la pregunta, lol. –
Creo que, si vi una propiedad así, al leer, esperaría recibir un objeto distinto devuelto al ivar a menos que el objeto devuelto se anunciara como inmutable.
Si tengo
@property (readonly, copy) NSMutableArray* foo;
y hago esto:
NSMutableArray* myFoo = [theObject foo];
[myFoo addObject: @"string"];
NSMutableArray* myOtherFoo = [theObject foo];
yo esperaría myOtherFoo
de no tener la cadena extra en lo que tiene myFoo
.
Nota: No he verificado esto todavía.
Lo he comprobado ahora y mi expectativa es incorrecta. Creo que lo consideraría un error.
La anotación "copiar" significa copiar-en-conjunto, no copiar-en-conseguir. –
@HotLicks, err, sí, lo sé. ¿No leíste las dos últimas líneas de mi respuesta? Personalmente, todavía lo considero un error. – JeremyP
¿Por qué esperas modificar el objeto y no tener el cambio visible? Dos accesos de la propiedad "foo" buscarán referencias al mismo objeto. –
- 1. NSString property copy or readonly?
- 2. initializer, properties, accessors y copy/retain/readonly
- 3. Liberando variables de instancia @property (copy)?
- 4. NSString @property, usando copy en lugar de retener
- 5. ¿Tiene sentido estudiar COBOL?
- 6. ¿Tiene sentido multiproceso en asp.net?
- 7. ¿Tiene sentido usar servidores web con estado?
- 8. Usando Cython con Django. ¿Tiene sentido?
- 9. ¿Tiene sentido integrar backbone.js con ASPNET MVC?
- 10. ¿Qué sentido tiene UTF-16?
- 11. ¿Cuándo tiene sentido abandonar MVVM?
- 12. php - ¿No tiene sentido FILTER_SANITIZE_EMAIL?
- 13. ¿Tiene sentido jQuery cache $ (this)?
- 14. ¿Qué sentido tiene Adobe AIR?
- 15. ¿Necesita una propiedad readonly de Objective-C especificar strong o copy?
- 16. preguntas sobre un @property de sólo lectura en ARC
- 17. ¿Tiene sentido usar un grupo de Actores?
- 18. ¿Qué sentido tiene LEA EAX, [EAX]?
- 19. git error fatal Ruta con a no tiene sentido
- 20. ¿Tiene sentido utilizar std :: uninitialized_fill() con cualquier asignador?
- 21. ¿Cuándo tiene sentido utilizar unique_ptr con contenedores STL? (C++ 11)
- 22. readonly con jquery
- 23. ¿Tiene sentido usar redis y mongodb?
- 24. ¿Cuándo tiene sentido usar un mapa?
- 25. ¿Tiene sentido un sistema .net/sap mixto?
- 26. ¿Tiene sentido copiar un tipo inmutable?
- 27. ¿Cuándo tiene sentido preseleccionar un hash?
- 28. ¿Tiene sentido hacer "try-finally" sin "catch"?
- 29. ¿Tiene sentido tener sentido para un servicio web basado en Rails?
- 30. Python: @staticmethod con @property
Una buena pregunta, me pregunto si la etiqueta 'readonly' solo hace que el setter sea un método privado, por lo que aún realizaría una copia cuando lo configurara dentro de la clase misma. es decir 'self.myProperty = newThing;' –
El doc de Apple tiene esto: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/ uid/TP30001163-CH17-SW19 – kennytm