¿Cómo se manejan rápidamente los valores nulos en la memory?

Sé que ARC utiliza el recuento de reference con las operaciones de incremento y disminución del comstackdor insertadas cuando se establecen references (fuertes). Borra la memory después de que el último grupo de reference del object sale del ámbito.

Mi pregunta contiene alnetworkingedor de tener una var:

var key = NSData?

Esto por defecto es nil si no hay ningún valor presente. Ahora, después de asignarlo y de reasignar el valor a nil – key = NSData() . ¿Esto eliminará los datos de la memory que estaban previamente allí?

Se agradecerán todos los artículos útiles.

Cuando escribes

 var key = NSData? 

La variable key se crea en la stack y se le asigna un valor nil .

Digamos que luego asigna un object a la key para

 key = NSData() 

Ahora se crea un object de tipo NSData en el Heap. Y la dirección de ese object se escribe en la variable key (en la stack). ARC también toma nota de que ahora refereneCount del object NSData es 1 porque está referencedo por 1 variable.

Ahora asignamos nuevamente nil a la tecla

 key = nil 

entonces ARC detecta que ya no se hace reference a los datos de NSData viven en el montón. Entonces, its referenceCount networkinguce a 0 y ARC lo elimina de la memory (o, probablemente, marca esa región del montón como memory libre que puede usarse de nuevo).

¿Cuándo se desasigna el object exactamente?

Como señaló @AaronBrager , el object no se desasigna instantáneamente de la memory. En realidad, se desasigna cuando se drena la agrupación de autorelease.

El siguiente ejemplo lo muestra

introduzca la descripción de la imagen aquí

Como puede ver, la printing "end" ocurre antes de que el object Person se desasigne.