Desarrollador iOS: pregunta de entrevista

¿Cómo evitas ciclos de retención en Swift?

ARC no puede romper un ciclo de referencias fuertes; usa weak si el objeto puede ser nil o unowned solo si la vida garantiza validez; los closures suelen requerir una lista de captura consciente.

Respuesta directa

Qué debe cubrir una buena respuesta

Cómo funciona

ARC libera un objeto cuando su contador de referencias fuertes llega a cero, así que dos objetos que se referencian fuertemente entre sí, o un objeto cuyo closure captura self de forma fuerte mientras el objeto guarda ese closure, nunca se liberan. La solución es hacer no propietario a un lado: weak cuando la referencia puede volverse nil de forma legítima y se declara opcional, unowned cuando el objeto referenciado seguro sobrevive a la referencia y se acepta el fallo si se usa mal. Los closures necesitan una lista de captura explícita porque capturan self fuertemente por defecto.

Ejemplo

Un view controller que guarda un handler de finalización de un cliente de red y escribe self.label.text dentro crea un ciclo hasta que el closure declara [weak self] y lo desempaqueta. Un par padre-hijo como un Document y su Page usa una referencia fuerte hacia abajo y débil hacia arriba para que eliminar el documento libere las páginas.

Errores frecuentes

  • Poner [weak self] en todos los closures, incluidos los que no se almacenan en ningún sitio.
  • Usar unowned para un objeto que puede liberarse antes y fallar en runtime.
  • Suponer que los structs de Swift o las suscripciones de Combine no pueden formar parte de un ciclo.

Una estructura útil para responder

Responde desde tu propia experiencia.

No memorices un guion: usa solo ejemplos que puedas explicar con honestidad en preguntas posteriores.

Practica esta respuesta con MiraHint

Abre el espacio de trabajo de escritorio y ensaya una respuesta clara con tus propias palabras.

Descargar MiraHint
Preguntas de entrevista para Desarrollador iOS