Diferencias entre fuerte y débil en Objective-C

Soy nuevo en Obj-C, así que mi primera pregunta es:

¿Cuáles son las diferencias entre strong y weak en @property declaraciones @property de punteros a objetos?

Además, ¿ nonatomic significa no nonatomic ?

Una referencia fuerte (que usará en la mayoría de los casos) significa que quiere “ser dueño” del objeto al que hace referencia con esta propiedad / variable. El comstackdor se ocupará de que cualquier objeto que asigne a esta propiedad no se destruirá siempre que lo señale con una referencia fuerte. Solo una vez que establezca la propiedad en nil , se destruirá el objeto (a menos que uno u otros objetos también tengan una referencia fuerte).

Por el contrario, con una referencia débil, significa que no desea tener control sobre la duración del objeto. El objeto al que hace referencia débilmente solo vive porque al menos otro objeto contiene una fuerte referencia a él. Una vez que ya no es el caso, el objeto se destruye y su propiedad débil se establece automáticamente en nil . Los casos de uso más frecuentes de referencias débiles en iOS son:

  1. delegar propiedades, que a menudo se referencian débilmente para evitar retener ciclos, y

  2. subvistas / controles de la vista principal de un controlador de vista porque esas vistas ya están fuertemente retenidas por la vista principal.

atómico vs. no atómico se refiere a la seguridad de subprocesos de los métodos getter y setter que el comstackdor sintetiza para la propiedad. Atomic (el valor predeterminado) le dice al comstackdor que haga que los métodos de acceso sean seguros para las subprocesos (al agregar un locking antes de que se acceda a un ivar) y no atómico hace lo contrario. La ventaja de no atómico es un rendimiento ligeramente superior. En iOS, Apple usa elementos no atómicos para casi todas sus propiedades, por lo que el consejo general es que hagas lo mismo.

Puede ser útil pensar en referencias fuertes y débiles en términos de globos.

Un globo no se irá volando si al menos una persona se aferra a una cuerda unida a él. El número de personas que tienen cadenas es el conteo retenido. Cuando nadie está agarrado a una cuerda, el balón se irá volando (dealloc). Muchas personas pueden tener cadenas para ese mismo globo. Puede obtener / establecer propiedades y métodos de llamada en el objeto al que se hace referencia con referencias fuertes y débiles.

Una referencia fuerte es como aferrarse a una cuerda de ese globo. Mientras te aferres a una cuerda atada al globo, no volará.

Una referencia débil es como mirar el globo. Puedes verlo, acceder a sus propiedades, llamar a sus métodos, pero no tienes ninguna cadena para ese globo. Si todos los que sostienen la cuerda sueltan, el globo se va volando, y ya no puedes acceder a él.

strong : le asigna el valor entrante, retendrá el valor entrante y liberará el valor existente de la variable de instancia

weak : le asignará el valor entrante sin retenerlo.

Entonces la diferencia básica es la retención de la nueva variable. Por lo general, desea conservarlo, pero hay situaciones en las que no desea tenerlo, de lo contrario obtendrá un ciclo de retención y no podrá liberar la memoria de los objetos. P.ej. obj1 retiene obj2 y obj2 retiene obj1. Para resolver este tipo de situaciones, usa referencias débiles.

Una respuesta ficticia: –

Creo que la explicación se da en la respuesta anterior, así que solo voy a decirte dónde usar STRONG y dónde usar WEAK :

Uso de Weak : – 1. Delegados 2. Puntos de venta 3. Subvistas 4. Controles, etc.

Uso de Strong : – Restante en todas partes que no está incluido en WEAK .

fuerte y débil , estas palabras clave giran en torno a la propiedad de objetos en Objective-C

¿Qué es la propiedad del objeto?

Las variables de puntero implican la propiedad de los objetos a los que apuntan.

  • Cuando un método (o función) tiene una variable local que apunta a un objeto, se dice que esa propiedad posee el objeto al que se apunta.
  • Cuando un objeto tiene una variable de instancia que apunta a otro objeto, se dice que el objeto con el puntero posee el objeto al que se apunta.

Cada vez que una variable apunta a un objeto, ese objeto tiene un propietario y se mantendrá con vida. Esto se conoce como una referencia fuerte .

Una variable puede opcionalmente no tomar posesión de un objeto al que apunta. Una variable que no se apropia de un objeto se conoce como referencia débil .

Busca aquí una explicación detallada Desmitificando @property y atributos

Aquí, la documentación de Apple ha explicado la diferencia entre propiedad débil y fuerte usando varios ejemplos:

https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html#//apple_ref/doc/uid/TP40011210-CH5-SW3

Aquí, en este blog, el autor ha recostackdo todas las propiedades en el mismo lugar. Le ayudará a comparar las características de las propiedades:

http://rdcworld-iphone.blogspot.in/2012/12/variable-property-attributes-or.html

fuerte es el predeterminado. Un objeto permanece “vivo” siempre que haya un puntero fuerte al mismo.

weak especifica una referencia que no mantiene vivo el objeto al que se hace referencia. Una referencia débil se establece en cero cuando no hay referencias fuertes al objeto.

Fuerte : Básicamente utilizado con las propiedades que utilizamos para obtener o enviar datos de / a otras clases. Débil : por lo general, todas las conexiones de salida son de tipo Débil desde la Interfaz.

No atómico : este tipo de propiedades se utilizan en condiciones en las que no queremos compartir nuestra salida u objeto en diferentes subprocesos simultáneos. En otras palabras, la instancia no atómica hace que nuestras propiedades se ocupen de un hilo a la vez. Espero que sea útil para ti.