Así que tuve un proyecto que admitía iOS 4, por lo que todos mis IBOutlets eran __unsafe_unretained
incluso IBOutlets que estaban en el plumín pero fuera de la vista principal del controlador (Vista separada en el mismo plumín) y todo funcionó muy bien.Diferencias entre débil e inseguro_unretenido
Así que ha llegado el momento y ahora el cliente quiere apoyar solamente iOS 5 para que nuestro equipo cambiado todos los __unsafe_unretained
IBOutlets para __weak IBOutlets
pero ahora el IBOutlets que no están dentro de la vista principal se ponen a nil
(excepto en viewdidload
) por lo no podemos agregarlos más tarde.
Si lo pienso, tiene sentido porque si no hay vista (vista principal) que retiene esos IBOutlets, se deben desasignar y poner a cero (no sé si esa es la palabra correcta), entonces la solución es quitar el __weak
de esos IBOutlets
Pero lo que no tiene sentido para mí es la razón por el diferente comportamiento entre unsafe_unretained
y weak
, en mi cabeza los unsafe_unretained
los debe cancelar la asignación y cuando la aplicación intenta acceder a ellos, ellos deben apuntar a una referencia no válida y luego la aplicación debería bloquearse.
Pensé que unsafe__unretained era lo mismo que weak pero without the zeroing.
¿Falta algo aquí?
Gracias.
Usted está en lo correcto. unsafe_unretained no anula la referencia. – Francesco