Ambigüedades en el uso de instrumentos para el desarrollo de iOS

Estoy perfilando una aplicación con instrumentos. El perfil se realiza utilizando la Herramienta de asignaciones de dos maneras:

  1. Al elegir directamente las asignaciones cuando ejecuto la aplicación para perfilar
  2. Al elegir fugas cuando ejecuto la aplicación para perfilar.

En ambos casos, tenía habilitada la herramienta Asignaciones para la testing. Pero sorprendentemente, tuve dos types diferentes de Out put para Asignaciones en estos casos.

¿Se supone que deben comportarse de manera diferente? o este es un problema con Instruments.

La hora en que perfilo con la herramienta Fugas:

En el gráfico de asignaciones: introduzca la descripción de la imagen aquí 1. Obtengo muchos picos en el gráfico, los bytes en vivo y los bytes generales son los mismos. 2. Obtengo las banderas negras (creo que alarmas sobre la advertencia de memory) después de 1 minuto de uso. Luego, después de que aparezca un set de banderas, mi aplicación se bloquea. (Esto sucede a veces, incluso cuando se ejecuta directamente la aplicación en el dispositivo)

La hora en que realizo el perfil con la herramienta de asignación:

En el gráfico de asignaciones: introduzca la descripción de la imagen aquí 1. No obtengo picos a menudo como lo fue en el caso anterior. Los bytes en vivo siempre fueron mucho less que los bytes generales. 2. Utilicé durante más de 20 minutos y nunca obtuve banderas negras.

Un hecho que supe es que, cuando los bytes en vivo y los bytes generales son iguales, el NSZombieEnabled podría habilitarse.

¿Alguno de ustedes ha encontrado este problema?

ACTUALIZACIÓN 1:

Me enfrenté a otro problema con el primer caso. Cada vez que hice un perfil después de una corta duración (en comparación con el perfil en el segundo caso), la aplicación obtuvo un montón de Black Flags y mi App Crashed. (Debido a la advertencia de memory)

Y cuando probé el uso similar paso a paso de la aplicación, mi aplicación no se bloqueó y no obtuvo ningún indicador.

¿Por qué esta discrepancia?

En el primer caso, solo realiza un seguimiento de las asignaciones en vivo porque la plantilla "Fugas" configura el instrumento de asignaciones de esa manera. En el segundo, está rastreando las asignaciones en vivo y desasignadas. (Como dijo CocoaFu).

Ambos son útiles, pero por razones ligeramente diferentes.

Solo el seguimiento de las asignaciones en vivo (en combinación con Heapshot Analysis, típicamente) es una excelente manera de analizar el crecimiento permanente del montón en su aplicación. Una vez que sepa qué es lo que se mantiene para siempre, puede descubrir por qué y ver si hay forms de optimizarlo.

El seguimiento de todas las asignaciones, vivo y muerto, es un medio muy eficaz para rastrear el ancho de banda de asignación. Puede orderar por bytes generales y comenzar con el número más grande. Eche un vistazo a todos los puntos de asignación (click la pequeña flecha al lado de la label en la Categoría de la fila seleccionada) y vea de dónde provienen todas las asignaciones.

Por ejemplo, su gráfico muestra que hay 1.27 MB de 14 asignaciones de bytes (9218 asignaciones) durante ese período de time. Todos han sido gratuitos () d [¡buenos!], Pero eso todavía representa un montón de trabajo para asignar, llenar con datos (presumiblemente), y liberar cada uno de ellos. Puede ser un problema, tal vez no.

(Para poner esto en perspectiva, utilicé esta técnica para optimizar una aplicación. Con solo centrarme en networkingucir el número de asignaciones transitorias – de corta duración, pude hacer que los algorithms primarios de la aplicación fueran 5 veces más rápidos y networkingucir el uso de la memory en un 85%. Resulta que la aplicación estaba copyndo cadenas muchas, muchas veces).


No estoy seguro de por qué su aplicación se bloqueó como describiste. Como se trata de una advertencia de memory, debería ver qué es lo que más se asigna.

Tenga en count que si tiene habilitada la detección de zombies, eso requiere mucha memory adicional.

Dependiendo de la forma en que se instancen las Asignaciones, hay diferentes opciones. Verifique las opciones haciendo clic en el símbolo "i" en el mosaico de Asignaciones.

Sí, también encuentro esto molesto.