Pérdida de memoria cada vez que se lanza UIScrollView

En mi aplicación tengo una vista de desplazamiento y cuatro vistas de tabla. Cada vez que uno es arrastrado y luego liberado, obtengo una fuga de 48 bytes. Esto realmente se sum. Como puede ver, ambos grupos de filtraciones tienen la misma fuente. ¿Alguien ha visto una fuga como esta antes?




Editar 1:

Cuando hago clic en la flecha al lado de la fuga, obtengo esta información para la fuga:

Lo que está viendo es un error conocido en iOS 5.1 y se está discutiendo en los foros de desarrolladores de iOS como tales. Puede encontrar el hilo relevante buscando en los foros “strdup”. Vea el tema titulado “Pérdida de memoria de la aplicación de elementos”. Busque la publicación de un empleado de Apple.

Lo más probable es que sea tu culpa, de alguna manera.

En el instrumento Allocations, presione el botón “i” y active “Record Reference Counts”. Entonces, Instruments puede mostrarle toda la asignación, retención, liberación automática y liberación de eventos que ocurrieron con esos objetos. (Debería ver una flecha al lado de cada elemento filtrado: haga clic para mostrar el historial de asignación de ese objeto).

Creo que encontrará que parte de su código retiene algo, o indirectamente, lo retenía. Probablemente la vista de desplazamiento o uno de sus reconocedores de gestos, como una conjetura.

Una solución:

Me di cuenta de que de alguna manera estos bytes filtrados se almacenan dentro de la vista de desplazamiento. Debe liberar su vista de desplazamiento y volver a asignarla de vez en cuando, manteniendo su estado. La forma en que detecta cuándo debe volver a cargar la vista de desplazamiento depende de usted, depende de las necesidades de su aplicación. Cada vez que suelta la vista de desplazamiento, estos bytes también se liberan.

Solución: descubrí que la pérdida de memoria se produjo en handlePan: si el delegado UIScrollView está configurado. Necesitaba los métodos de delegado, por lo que subclasificó UIScrollView y declaró mi propio @protocol. Luego anulé el selector de destino para el scrollView panGestureRecognizer, sin enviarlo a super:

//yourScrollView.h @protocol yourScrollViewDelegate -(void)yourProtocol; @end //yourScrollView.m -(void)handlePan:(id)sender{ [yourDelegate yourProtocol]; }