Sobes.tech
Junior — Middle

¿Al pasar o crear un cierre, se copia o se pasa por referencia?

sobes.tech AI

Respuesta de la IA

En iOS (Swift/Objective-C), los cierres (closures) se pasan por referencia, no se copian al pasarlos o crearlos. Además, el objeto del cierre en sí es un tipo de referencia.

Sin embargo, al capturar variables del contexto externo, el cierre puede crear copias de estos valores (por ejemplo, si son valores de tipo struct), o capturarlos por referencia (si son clases).

Ejemplo en Swift:

var x = 10
let closure = { print(x) } // el cierre captura x por valor (copia)
x = 20
closure() // mostrará 10, ya que x fue capturado por copia

Al pasar un cierre a una función o guardarlo en una variable, se pasa una referencia al cierre, no una copia de todo su cuerpo.

Por lo tanto, los cierres se pasan por referencia, pero las variables capturadas pueden ser copiadas o capturadas por referencia dependiendo de su tipo y contexto.