He utilizado la opción "Convertir a Objective C ARC" en Xcode 4.3 para convertir un proyecto iniciado en Xcode 4.0 para usar ARC. Luego de corregir los errores que encontró la herramienta, pasé por el proceso en el que la herramienta de migración eliminó todos los mensajes de lanzamiento y retuse los atributos en las declaraciones de mis propiedades. Así que ahora tengo todas mis propiedades con el atributo (no atómico). Al leer la documentación, todavía no tengo una respuesta clara sobre qué hacer.Cambio con propiedades y ivars después de la migración de ARC
Así que mi pregunta es: En caso de que omita la palabra clave sobre la semántica setter (fuerte, débil, retener, asignar) en la declaración de propiedad, ¿cuál es el atributo predeterminado en las propiedades cuando se usa ARC?
Encontré en la documentación que el atributo de propiedad predeterminado es asigne. Sin embargo, también dicen que ahora el atributo predeterminado para ivars, en caso de que lo omita, es strong.
Para explicar mejor mi pregunta, he aquí un ejemplo. Me encabezado del archivo tenemos la declaración:
@property (nonatomic) MyClass *objectToUse;
y en nuestra aplicación sólo tenemos
@synthesize objectToUse;
Si entonces escribimos dentro de algún método:
self.objectToUse = [[MyClass alloc] init];
tienen creamos un fuerte (retener) o débil (asignar) referencia? Si en cambio escribimos
objectToUse = [[MyClass alloc] init];
usando el ivar ¿hemos cambiado la situación con respecto a la política de retención de objetos? Me parece que ahora con ARC, la mejor práctica de usar las propiedades para la gestión de la memoria ya no es la misma práctica.
Dado que la migración de ARC eliminó el atributo 'retain' de sus declaraciones de propiedad, ¿es posible que el valor predeterminado haya cambiado a' strong' a partir de Xcode 4.3? No tengo una computadora para probarlo ahora, pero no me sorprendería. –
Eso es realmente lo que me confunde, ya que ARC elimina todos los atributos 'retain' y deja todas las propiedades con 'assign' (por defecto), lo que significa que después de la migración ARC debe pasar por todas sus declaraciones de propiedades y agregar el atributo 'strong' para tener el mismo comportamiento. Es interesante que los delegados con el atributo 'assign' se cambien a' unsafe_unretained', lo cual está bien, pero ¿es posible que 'retain' no se cambie a' strong' automáticamente? – Luka
Parece un error en el migrador para mí. Me parece recordar que mis proyectos 'retener' los atributos se convierten a' fuerte' en XCode 4.2 –