IBOutlet
debe ser fuerte, por razones de rendimiento. Consulte Referencia del guión gráfico, IBOutlet fuerte, Escena Dock en iOS 9
Como se explica en este párrafo, las salidas a las subvistas de la vista del controlador de vista pueden ser débiles, porque estas subvistas ya son propiedad del objeto de nivel superior del archivo nib. Sin embargo, cuando un Outlet se define como un puntero débil y se establece el puntero, ARC llama a la función de tiempo de ejecución:
id objc_storeWeak(id *object, id value);
Esto agrega el puntero (objeto) a una tabla usando el valor del objeto como clave. Esta tabla se conoce como la tabla débil. ARC utiliza esta tabla para almacenar todos los punteros débiles de su aplicación. Ahora, cuando el valor del objeto se desasigna, ARC iterará sobre la tabla débil y establecerá la referencia débil en nil. Alternativamente, ARC puede llamar a:
void objc_destroyWeak(id * object)
Luego, el objeto no está registrado y objc_destroyWeak vuelve a llamar:
objc_storeWeak(id *object, nil)
Esta contabilidad asociada con una referencia débil puede demorar 2-3 veces más que la publicación de una referencia fuerte. Por lo tanto, una referencia débil introduce una sobrecarga para el tiempo de ejecución que puede evitar simplemente definiendo salidas como fuertes.
A partir de Xcode 7, sugiere strong
Si ve la sesión 407 de WWDC 2015 Implementando diseños de UI en Interface Builder , sugiere (transcripción de http://asciiwwdc.com/2015/sessions/407 )
Y la última opción que quiero señalar es el tipo de almacenamiento, que puede ser fuerte o débil.
En general, debe fortalecer su salida, especialmente si está conectando una salida a una vista secundaria o a una restricción que no siempre va a ser retenida por la jerarquía de vistas.
El único momento en el que realmente necesita debilitar una salida es si tiene una vista personalizada que hace referencia a algo que respalde la jerarquía de la vista y, en general, eso no se recomienda.
Así que voy a elegir fuerte y haré clic en conectar, lo que generará mi salida.
IBOutletCollection()
no debe serweak
, de lo contrario vuelve comonil
.