ios - programacion - Después de la conversión automática de ARC: Asignación de objetos retenidos a propiedades inseguras; objeto será liberado después de la asignación
xcode 9 español (2)
Acabo de convertir un proyecto antiguo a ARC usando la refactorización automática de Xcode.
@property (nonatomic, retain) NSMutableArray *cards;
fue reemplazado por:
@property (nonatomic) NSMutableArray *cards;
Esto tiene sentido porque lo que he leído es que "fuerte" es el estado predeterminado. Sin embargo, la siguiente línea me está dando el error en el título:
self.cards = [[NSMutableArray alloc] initWithCapacity:54];
El error se resuelve agregando un strong
retroceso en donde retener solía ser:
@property (nonatomic, strong) NSMutableArray *cards;
Sin embargo ... si necesito volver atrás y poner strong
en cada declaración de propiedad que se retain
... ¿por qué la refactorización ARC los eliminó a todos?
Me he topado con la misma advertencia y abrí un Incidente de soporte técnico. El ingeniero verificó que el valor predeterminado se cambió de "asignar" a "fuerte" por razones de coherencia dentro de ARC.
Dijo que tanto la advertencia como la documentación están equivocadas y serán reparadas. ¡Hasta que se haga eso, evitaría el defecto implícito por completo!
Agregar explícitamente "fuerte" (como sugirió BJ Homer) es una forma segura de silenciar la advertencia y ser compatible. Pero no asumas que las propiedades no sean retenidas por defecto. Siempre ponga "débil" o "asignar" allí, también.
Edit: La documentación de Clang ahora documenta oficialmente este cambio. La advertencia ha sido fixed .
Edición 2: Xcode 4.4 aparentemente incluye la corrección.
Parece incorrecto que se convierta en no nonatomic, retain
en no nonatomic
. Siempre lo he visto convertir a no nonatomic, strong
. Si puede producir un proyecto simple que se convierta en la forma en que lo vio, le sugiero que presente un radar con él.
Supongo por cierto que estás usando el último Xcode.