Instrumentos Las asignaciones rastrean alloc y dealloc de objetos de clases definidas por el usuario

¿Es posible rastrear la asignación y la desasignación de mis objetos Objective-C? Por ejemplo, si tengo un Libro de clase, quiero hacer un seguimiento de todas las asignaciones y desasignaciones de los objetos del tipo de Libro. Puedo rastrear todas las clases predeterminadas de SKD, como UIViewController, UIWindow, UIView, NSDictionary y todo eso, pero también quiero rastrear los objetos que se crean a partir de mis clases definidas.

Puede usar el instrumento Allocations para rastrear el ciclo de vida de sus objetos. Si usa la plantilla “Asignaciones”, está configurado para registrar malloc y eventos free . Es posible que desee configurarlo para que también registre los eventos de retain , release y release autorelease activando la casilla “Registrar recuentos de referencia” en la configuración del instrumento Allocation:

casilla de verificación de recuentos de referencia

(No puede alternar esto mientras Instruments está grabando, que se inicia de manera predeterminada tan pronto como elija su plantilla).

Actualización para Xcode 9: Apple ha dificultado encontrar estas configuraciones. Ahora debe seleccionar el instrumento Allocations, luego desde la barra de menú, elija File> Recording Options.

Después de su ejecución, puede encontrar sus objetos utilizando la vista Asignaciones> Estadísticas> Resumen de objetos, que es la configuración predeterminada para el panel Detalle (la mitad inferior de la ventana):

Configuración del resumen de objetos para el panel Detalle

Si desea ver objetos que se han desasignado antes de detener la ejecución, debe cambiar la configuración de Duración de la asignación de “Creado y aún vivo” (predeterminado) a “Todos los objetos creados”:

Asignación de configuración de vida útil

Para buscar objetos de una clase específica, comience por escribir el nombre de la clase en el campo Buscar en el extremo derecho de la barra de herramientas de la ventana. Luego, busque el nombre de la clase en la columna Categoría de la vista de lista, pase el mouse sobre ella y haga clic en la flecha que aparece a su lado. Por ejemplo, mi aplicación tiene una clase llamada Tile , entonces la busco y luego hago clic en la flecha junto a Tile en la vista de lista:

buscando

Ahora la vista de lista muestra cada instancia de Tile . (Tenga en cuenta que debe ingresar la clase real del objeto, no una superclase. Al ingresar NSObject , solo encontrará los objetos que fueron creados por [NSObject alloc] , no los objetos que fueron creados por [Tile alloc] .) Puedo ver el historial para cualquier instancia particular haciendo clic en la flecha al lado de la dirección de esa instancia:

Obteniendo detalles

En la vista de detalle de un objeto, puedo ver el malloc y free eventos free y, desde que autorelease referencias de registro”, también puedo ver los mensajes de retain , release y release autorelease y su efecto en el recuento de retención del objeto. Si deseo ver la stack de llamadas para cualquiera de esos eventos, puedo abrir el panel de detalles extendido en el lado derecho de la ventana:

detalles ampliados de la pila de llamadas