¿Tiene sentido copyr @property en combinación con readonly?

Si entiendo esto correctamente, la copy aplica el configurador para crear una copy del object pasado. Sin embargo, si lo uso junto con readonly , no habrá un setter. Entonces, ¿es mi suposition correcta, que combinar @property (copy, readonly) no tiene ningún sentido o me estoy perdiendo algo?

Tiene sentido Por ejemplo, si desea acceder al configurador de una propiedad solo en su implementación:

 @interface MyClass : NSObject @property (nonatomic, copy, readonly) NSData *data; - (id)initWithData:(NSData *)data; @end 

y en la continuación de class en el file .m :

 @interface MyClass () @property (nonatomic, copy, readwrite) NSData *data; @end 

Tenga en count que la copy, readonly statement copy, readonly en el encabezado público se requiere en este caso!

De acuerdo con la documentation de Apple (que he vinculado aquí para usted):

copy
Especifica que se debe usar una copy del object para la asignación.

El valor anterior se envía un post de release .

La copy se realiza invocando el método de copy . Este atributo es válido solo para types de objects, que deben implementar el protocolo NSCopying .

Entonces, sí, estás en lo cierto … readonly crea un método getter y la copy se ignoraría efectivamente, ya que no hay un método setter que haga la asignación.

Tienes razón, no tiene sentido tener ambos.

Creo que, si veo una propiedad así, en lectura, espero recibir un object devuelto distinto al ivar a less que el object devuelto haya sido anunciado como inmutable.

Si tengo

 @property (readonly, copy) NSMutableArray* foo; 

y hago esto:

 NSMutableArray* myFoo = [theObject foo]; [myFoo addObject: @"string"]; NSMutableArray* myOtherFoo = [theObject foo]; 

Espero que myOtherFoo no tenga la cadena adicional que myFoo tiene.

Nota: aún no lo he verificado.

Lo he comprobado ahora y mi expectativa es incorrecta. Creo que lo consideraría un error.