0Pricing
Swift Academy · Lección

Deinicializadores y ciclo de vida de la memoria

Utilice deinit para liberar recursos antes de que se desasigne un objeto.

Deinicializadores y ciclo de vida de la memoria es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.

Introducción

Las clases de Swift pueden definir un `deinit` que se ejecuta justo antes de liberar la instancia. Comprender todo el ciclo de vida del objeto — init → uso → deinit — es fundamental para gestionar los recursos.

¿Qué es deinit?

```swift class FileHandle { let path: String init(path: String) { self.path = path; print("Opened \(path)") } deinit { print("Closed \(path)") } } do { let f = FileHandle(path: "/tmp/log.txt") } // deinit called here when f goes out of scope ```

Reglas de sintaxis de deinit

• Solo para clases: las estructuras y enumeraciones no tienen `deinit` • No admite parámetros ni valor de retorno • No lleva paréntesis: `deinit { }`, no `deinit() { }` • ARC lo llama automáticamente; nunca lo llame directamente • El `deinit` de la superclase se llama automáticamente después del `deinit` de la subclase

Casos de uso para la limpieza

Usos habituales de `deinit`: • Cerrar conexiones de red • Eliminar observadores de notificaciones: `NotificationCenter.default.removeObserver(self)` • Invalidar temporizadores • Cerrar descriptores de archivos o conexiones de bases de datos

Contador de retenciones y ciclo de vida

ARC realiza un seguimiento de cuántas referencias fuertes apuntan a un objeto: ```swift var a: Dog? = Dog() // retain count = 1 var b = a // retain count = 2 a = nil // retain count = 1 b = nil // retain count = 0 → deinit called ```

Cadena de deinit de una subclase

```swift class Base { deinit { print("Base deinit") } } class Child: Base { deinit { print("Child deinit") } // super.deinit called automatically after } var c: Child? = Child() c = nil // prints: Child deinit, then Base deinit ```

weak evita la retención

```swift class Owner { var pet: Dog? deinit { print("Owner gone") } } class Dog { weak var owner: Owner? // weak = no strong retain deinit { print("Dog gone") } } ``` Cuando `owner` se establece en nil, `Owner` puede liberarse aunque `Dog` mantenga una referencia.

Los ciclos de retención impiden deinit

```swift class A { var b: B? } class B { var a: A? } var a: A? = A() var b: B? = B() a?.b = b b?.a = a a = nil b = nil // deinit never called — retain cycle! ```

Patrón de invalidación de temporizadores

```swift class PollingService { var timer: Timer? func start() { timer = Timer.scheduledTimer(...) } deinit { timer?.invalidate() timer = nil print("Timer stopped") } } ```

Detección de fugas con Instruments

Si `deinit` nunca se llama, probablemente tenga un ciclo de retención. Utilice Xcode Instruments → la plantilla Leaks para detectar objetos que se asignaron pero nunca se liberaron.

Comprobación rápida

¿Qué tipos pueden definir un `deinit`?

Resumen

Puntos clave: • `deinit { }`: limpia los recursos antes de liberar el objeto • Solo para clases; el `deinit` de la superclase se llama automáticamente después del de la subclase • ARC determina cuándo se ejecuta deinit (cuando el contador de retenciones llega a 0) • Los ciclos de retención impiden deinit; rómpalos con `weak`/`unowned` • Utilice Instruments Leaks para encontrar objetos cuyo deinit nunca se ejecuta ¡Curso completado! Siguiente: patrones de enumeraciones y máquinas de estados.

Preguntas frecuentes

¿La lección «Deinicializadores y ciclo de vida de la memoria» es gratis?

Sí — el texto completo de «Deinicializadores y ciclo de vida de la memoria» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Deinicializadores y ciclo de vida de la memoria»?

Utilice deinit para liberar recursos antes de que se desasigne un objeto. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Deinicializadores y ciclo de vida de la memoria»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Herencia de clases y la palabra clave super
  2. override, final y prevención de la herencia
  3. Conversión de tipos: is, as?, as! y as
  4. Deinicializadores y ciclo de vida de la memoria
← Volver a Swift Academy