Instruments Allocations y Leaks
Realice un seguimiento de las asignaciones del heap y encuentre fugas de memoria y objetos zombie.
Instruments Allocations y Leaks es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 2 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.
Instrumento Allocations
El instrumento Allocations registra cada asignación y desasignación del montón, y muestra el crecimiento de la memoria a lo largo del tiempo.
// Instruments → Allocations template
// Shows live bytes, allocation count, and transient objectsAnálisis del crecimiento del montón
Utilice la app y observe el gráfico Live Bytes. Un crecimiento constante sin estabilización indica una fuga de memoria.
// Normal: allocations rise and fall as views appear/disappear
// Leak: allocations only grow, never releasedAnálisis por generaciones
Marque una instantánea de generación antes y después de un flujo de usuario para ver qué objetos persistieron inesperadamente.
// Instruments toolbar → "Mark Generation"
// Perform action (e.g., open and close a screen)
// "Mark Generation" again
// Inspect objects in the new generation that weren't releasedInstrumento Leaks
El instrumento Leaks analiza periódicamente el montón e identifica objetos asignados pero inalcanzables (ciclos de retención).
// Run Leaks alongside Allocations in the "Leaks" template
// Red bars in the timeline = leaked objects detected
// Click a bar to see the leaked object graphLeer el gráfico de fugas
El gráfico de objetos de Leaks muestra qué objetos se retienen entre sí formando un ciclo y permite localizar la raíz del ciclo de retención.
// Example cycle:
// ViewController → ViewModel → Closure → ViewController
// Instruments draws the reference edges visuallyDetectar ciclos de retención en cierres
La fuga más habitual se produce cuando un cierre captura fuertemente self mientras self conserva el cierre.
class MyVC: UIViewController {
var onComplete: (() -> Void)?
override func viewDidLoad() {
super.viewDidLoad()
// LEAK: closure captures self; self holds onComplete
onComplete = { self.dismiss(animated: true) }
// FIX:
onComplete = { [weak self] in self?.dismiss(animated: true) }
}
}Instrumento VM Tracker
VM Tracker muestra las regiones de memoria virtual y las páginas modificadas. Una presión elevada de memoria modificada hace que iOS termine la app.
// Instruments → "VM Tracker" in allocation instrument
// Look for: large __DATA dirty pages, high CG raster memoryObjetos Zombie
Active Zombie Objects en Instruments para detectar objetos liberados en exceso: se convierten en "zombis" que registran un mensaje cuando se accede a ellos.
// Instruments → Edit → Record Settings → Enable Zombie Objects
// Accessing a zombie prints: "*** -[MyObject method] sent to deallocated instance"Instantáneas del montón
Compare dos estados del montón con "Heap Shot" para encontrar los objetos que sobreviven entre ambas instantáneas; es una técnica muy útil para detectar fugas en controladores de vista.
// After navigating to and from a screen twice:
// Heap should return to baseline
// Objects remaining in the diff = leaked view controllers or modelsMetricKit para la memoria en producción
Use MXMetricPayload para recopilar datos de memoria y rendimiento de usuarios reales en producción.
import MetricKit
class AppDelegate: UIApplicationDelegate, MXMetricManagerSubscriber {
func didReceive(_ payloads: [MXMetricPayload]) {
payloads.forEach { print($0.memoryMetrics as Any) }
}
}Comprobación rápida
¿Qué indica un crecimiento constante del gráfico "Live Bytes" en el instrumento Allocations?
Resumen de la lección
Use Allocations para realizar un seguimiento del crecimiento del montón y de las instantáneas de generación. Use Leaks para detectar ciclos de retención y consultar el gráfico de objetos. Use Zombie Objects para detectar errores de liberación excesiva. Corrija los cierres con [weak self]. Use MetricKit para realizar un seguimiento de la memoria de usuarios reales en producción.
Preguntas frecuentes
¿La lección «Instruments Allocations y Leaks» es gratis?
Sí — el texto completo de «Instruments Allocations y Leaks» 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 «Instruments Allocations y Leaks»?
Realice un seguimiento de las asignaciones del heap y encuentre fugas de memoria y objetos zombie. 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 2 de 4.
¿Cuánto tiempo toma la lección «Instruments Allocations y Leaks»?
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
- Fundamentos de Instruments: Time Profiler
- Instruments Allocations y Leaks
- Main Thread Checker y bloqueos
- Optimización de rutas críticas: COW, inlining y especialización