Cómo hacer una propiedad readonly inmutable en el file de cabecera (.h), una propiedad de escritura reeseable mutable en implementaion (.m)

Tengo un object que contiene un dictionary JSONData . Desde el file de encabezado, y hacia las otras classs que accederán a él, quiero que esta propiedad solo sea de solo lectura e inmutable.

 @interface MyObject : NSObject @property (readonly, strong, nonatomic) NSDictionary *JSONData; @end 

Sin embargo, necesito que sea readwrite y mutable del file de implementación, así, pero esto no funciona:

 @interface MyObject () @property (readwrite, strong, nonatomic) NSMutableDictionary *JSONData; @end @implementation MyObject // Do read/write stuff here. @end 

¿Hay algo que pueda hacer para hacer cumplir el tipo de abstracción que voy a utilizar? Miré las otras preguntas y, aunque ya sé cómo hacer una propiedad readonly de .h y readwrite de .m , no puedo encontrar nada sobre la diferencia de mutabilidad.

Necesita una variable mutable privada por separado en su implementación. Puede anular el getter para devolver un object inmutable.

 @interface MyObject () { NSMutableDictionary *_mutableJSONData; } @end @implementation MyObject // ... -(NSDictionary *)JSONData { return [NSDictionary dictionaryWithDictionary:_mutableJSONData]; } // ... @end 

No es necesario implementar el configurador, ya que es readonly .