Hay dos nuevos atributos de administración de memoria para las propiedades introducidas por ARC, strong
y weak
.
Aparte de copy
, que obviamente es algo completamente diferente, ¿hay alguna diferencia entre strong
vs retain
y weak
vs assign
?
Según tengo entendido, la única diferencia aquí es que weak
se asignará nil
al puntero, mientras assign
que no lo hará, lo que significa que el programa se bloqueará cuando envíe un mensaje al puntero una vez que se haya lanzado. Pero si lo uso weak
, esto nunca sucederá, porque el mensaje enviado a nil
no hará nada.
No sé acerca de las diferencias entre strong
y retain
.
¿Hay alguna razón por la que debería usar assign
y retain
en nuevos proyectos, o están siendo desaprobados?
weak
y strong
) y 4 calificadores de toda la vida variables ( __strong
, __weak
, __unsafe_unretained
, __autoreleasing
). Vea las notas de ARC a continuación.
assign
al compilar con ARC fue un error. Hay muchas respuestas eliminadas sobre esto. Parece que fue cambiado antes del lanzamiento final. unsafe_unretained
es el atributo preferido para muchos de los primeros en adoptar. Para comprobar que unsafe_unretained
es un atributo válido, consulte "Programación con Objective-C" de Apple en la sección "Datos encapsulados" bajo el subtítulo "Usar referencias no retenidas inseguras para algunas clases". Que dice: "Para una propiedad, esto significa usar el atributo unsafe_unretained:"
strong
,weak
yunsafe_unretained
.