En mi archivo de interfaz (.h), tengopreguntas sobre un @property de sólo lectura en ARC
@property(readonly) NSString *foo;
y en mi archivo de implementación (.m), tengo
@synthesize foo;
Con ARC encendido, el compilador me da este error: Recuento automático de referencias Problema: ARC prohíbe sintetizar una propiedad de un objeto Objective-C con propiedad no especificada o atributo de almacenamiento.
El error desaparece si agrego un strong
, weak
o copy
a la propiedad. ¿Por qué es esto? ¿Por qué habría diferencias entre estas cosas para una propiedad de solo lectura, cuáles son esas diferencias y por qué el programador tiene que preocuparse por ellas? ¿Por qué el compilador no puede deducir de manera inteligente una configuración predeterminada para una propiedad de solo lectura?
Otra pregunta mientras estoy en ello: strong
, weak
, o copy
son las únicas cosas que tienen sentido en ARC, ¿verdad? Ya no debería estar usando retain
y assign
, ¿o sí?
Ah, está empezando a tener algo de sentido ahora. Pero si especifico 'copy' (para una propiedad' readwrite'), ¿el ivar generado será '__strong' o' __weak'? – Enchilada
(En realidad, 'copy' también compila para una propiedad' readonly', lo que me parece un tanto extraño). – Enchilada
Una propiedad 'copy' sintetizará' __strong'.La razón principal por la que puede declarar 'copy' en una propiedad' readonly' es para poder redeclararla en una extensión de clase para que sea 'readwrite'; para hacerlo, todo lo demás debe coincidir. –