2009-01-30 6 views
22

Estoy usando la función Leaks Instruments a través de Xcode para (intentar y) encontrar pérdidas de memoria. Todavía no he descubierto cómo usar este programa. Hago clic en Fugas en el programa y veo que la memoria aumenta a medida que hago varias cosas en el simulador. Tengo el panel Detalle ampliado mostrado. Lo único en el panel de detalles ampliados que hace referencia a mi aplicación es principal. Como en el método principal producido por Xcode. Todo lo demás es UIKit, Foundations y otras clases de SDK que no escribí. ¿Qué estoy haciendo mal porque no aparece nada desde mi aplicación?¿Cómo se detectan fugas de memoria en el iPhone?

Antes de tocar 3 minutos, hay más de 100 fugas que suman un total de 2.5k. ¿Es esto común?

+1

¿Está mirando los datos reales de "filtraciones" o está mirando los datos de Asignación de Objetos? Si estás viendo lo último, entonces sí, es normal ... esas no son filtraciones, solo asignaciones. Te da una idea de tu huella de memoria. –

+0

Estoy buscando fugas. Lo único que hay allí es main. El número de fugas y bytes continúa aumentando a medida que uso la aplicación. No entiendo cómo main podría estar escapando tanto. – 4thSpace

+0

asegúrese de que se liberen todas las alloc. Si no, estás creando pérdidas de memoria. –

Respuesta

29

He escrito un tutorial sobre el uso de instrumentos para rastrear las fugas de memoria del iPhone. No estoy seguro si te ayudará con lo que estás tratando o no ... pero no podría lastimar. :-)

http://www.streamingcolour.com/blog/tutorials/tracking-iphone-memory-leaks/

+0

Buen tutorial. Solo recuerde que puede * omitir muchos pasos allí * si solo usa Xcode para cargar Instrumentos yendo ** Ayuda y escribiendo "Fugas" **. Le mostrará la opción de menú que lo cargará con todo configurado. – cregox

3

No estoy familiarizado con el uso de Leaks, pero siempre puede intentar ejecutar el analizador Clang en su código para ver si eso puede hacer que todo salga bien: http://clang.llvm.org/StaticAnalysis.html. A menudo puede encontrar muchos errores que pueden conducir a pérdidas de memoria.

+0

He descargado esa herramienta, solo para descubrir en sus documentos que parece ser la misma que ya está incluida en XCode (ejecutada usando "command-shift-a"). ¿Cierto? – Jonny

+0

Es cierto. Hace un año y medio cuando publiqué esto, no estaba incluido en Xcode. –

5

Cambie la vista a "Detalle ampliado" en el panel de instrumentos. Esto le mostrará la traza de la pila de cada objeto filtrado después de detener la grabación y seleccionar el objeto filtrado.

Usted ve llamadas en la API, pero lo que le interesa es encontrar el último método de su aplicación antes de las llamadas API, que es donde está la fuga.

Consejo: active "recopilar contenido de memoria" en la vista de fugas. Ver los valores del objeto también debería ayudar a encontrar dónde está el problema.

Usted no quiere ninguna pérdida. 100 fugas no es típico (al menos en mis aplicaciones;) Típico debería ser 0.

+0

@Ben Gracias. Lo intentaré. @lajos Por favor, vea la parte donde digo, "Tengo el panel de Detalle extendido mostrado". – 4thSpace

1

Tenga en cuenta también que la herramienta de fugas no le mostrará instancias en las que los objetos se retengan demasiado y sigan retenidos. Las fugas son casos en los que los objetos que deberían haberse soltado simplemente se quedan sin nadie para limpiarlos. Los objetos retenidos quedan válidamente retenidos aunque pienses que deberían haber desaparecido, por lo que la herramienta de fugas no puede señalarlos, ya que todavía se mencionan y no hay forma de diferenciarlos de los objetos que aún deben conservarse.

Para encontrarlos, utilice la herramienta de informe de memoria y asegúrese de que el uso de memoria se reduzca por completo después de liberar un objeto. Si nota que algo no está liberando memoria, puede comenzar colocando puntos de interrupción en dealloc para ver si lo que espera ver liberado realmente se está liberando.

Debe buscar ambas cajas para mantener una huella de memoria limpia.

+0

¡Un gran punto! Para encontrarlos, a veces agrego llamadas NSLog a dealloc para imprimir el conteo retenido. – lajos

2

Tenga en cuenta que el simulador puede perder cuando el dispositivo no lo hará. Ya corrí hacia eso una vez con la clase UITableViewController.

2

Utilice LLVM/Clang Static Analyzer.

3

Xcode: Ejecutar -> Comienza con la herramienta de rendimiento -> Fugas

0

Para detectar pérdidas de memoria que puede utilizar la función de "construir y analizar" de Xcode.

Simplemente seleccione compilar -> compilar y analizar en el menú de Xcode.

1
Run -> Start with Performance Tool -> Leaks 
0

aplicación fugas que se pueden encontrar en Xcode: run -> Start with Performance Tool -> Leaks.

Apple's Instruments utilidad que se puede encontrar en /Developer/Applications/Performance Tools.

0

Una de las mejores maneras de encontrar las pérdidas de memoria es Seleccionar producto-> Analizar. En la izquierda, Xcode muestra en qué archivo tiene fugas de memoria. ¿Cuáles son las variables que causan fugas de memoria? Esta es una de las mejores maneras de encontrar fugas de memoria.