2012-03-18 19 views
18

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 suma. Como puede ver, ambos grupos de filtraciones tienen la misma fuente. ¿Alguien ha visto una fuga como esta antes?Pérdida de memoria cada vez que se lanza UIScrollView




Edición 1:

Cuando hago clic en la flecha situada junto a la fuga, consigo esta información para la fuga:

Respuesta

28

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.

+0

Ah, ya veo. Parece que no hay nada que se pueda hacer en este extremo. ¡Gracias por la respuesta! –

+0

Claro, de eso se trata Stack ... ¡obteniendo respuestas! –

0

Lo más probable es que sea su 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 está reteniendo algo, o indirectamente causando que sea retenido Probablemente la vista de desplazamiento o uno de sus reconocedores de gestos, como una conjetura.

+0

registro de referencia que cuenta es activada, pero no veo cómo los objetos filtrados desde el interior de las asignaciones? Puedo ver los objetos filtrados en Leaks (duh), pero no puedo ver dónde fueron retenidos/liberados/liberados automáticamente. –

+0

Acabo de probar esto usando Xcode 4.3.1, usando el preajuste "Fugas" en Instrumentos. Record Reference Counts ya estaba activado. En la lista de objetos filtrados, en la columna "Dirección", hay un icono de flecha: haga clic para mostrar el historial de esa dirección. Si la flecha no aparece, lo mejor que puedo sugerir es jugar con la configuración en Instrumentos. –

+0

Lo encontré, pero la información allí no es extremadamente útil. Editando en mis resultados. –

0

Una solución:

me di cuenta de que de alguna manera esta filtró bytes se almacenan dentro de la ScrollView. 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.

+0

No, obtuve vistas de desplazamiento y vistas de tabla que son alloc y dealloc'd de vez en cuando, y eso no soluciona la fuga. La solución es simplemente esperar la corrección oficial en iOS. –

0

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. Entonces me hizo caso omiso del selector de destino para el ScrollView panGestureRecognizer, sin enviarlo a súper:

//yourScrollView.h 
@protocol yourScrollViewDelegate 
-(void)yourProtocol; 
@end 

//yourScrollView.m 
-(void)handlePan:(id)sender{ 
    [yourDelegate yourProtocol]; 
} 
Cuestiones relacionadas