IOS: el consumo de memoria aumenta al cambiar entre vistas (ARC habilitado)

Soy nuevo en X-code y he estado buscando en todas partes y probando "todo" sin suerte. Si puedes ayudarme te cantaré una canción :)

Estoy haciendo una aplicación para iPad que usa mucha memoria. El tamaño del proyecto es de aproximadamente 100 mb (muchas imágenes), pero el monitor de actividad muestra que estoy usando hasta 140 mb de "memoria real" después de haber cambiado entre todas las vistas (archivos xib) :(

Mi huella de memoria aumenta cada vez que cambio entre vistas (archivos xib). ARC está habilitado, por lo que no puedo liberar la vista anterior de la memoria. Tengo 10 páginas (archivos xib) para cambiar.

Estoy usando este código para cambiar entre los archivos xib:

viewController2 *view2 = [[viewController2 alloc] initWithNibName:@"viewController2" bundle:nil];
view2.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:view2 animated:YES];

Cuando vuelvo o paso a la siguiente vista, uso el mismo tipo de código.

He intentado usar [self dismissModalViewControllerAnimated:NO];, [self.view removeFromSuperview];, self.view = nil; pero la memoria sigue aumentando.

Según tengo entendido, las vistas se apilan una encima de la otra, lo que hace que aumente la memoria.

¿Cómo puedo cambiar a la siguiente vista (archivo xib) y al mismo tiempo eliminar el uso de memoria de mi primera vista?

Este problema me ha hecho tirarme de los pelos :(

preguntado el 03 de mayo de 12 a las 19:05

1 Respuestas

Tengo una aplicación con 40 controladores de vista de pantalla completa diferentes. Es una especie de presentación de diapositivas interactiva donde cada diapositiva tiene algún tipo de interacción. Configuré esta aplicación con un controlador de vista maestro que controla qué controlador de vista individual se presenta en qué momento. Hago la transición de un controlador de vista al siguiente agregando el nuevo controlador de vista como un controlador de vista secundario y la vista del nuevo controlador de vista como una subvista de la vista del controlador de vista maestro:

[self addChildViewController:newView];
[self.view addSubview:newView.view];

self siendo el controlador de vista maestro. entonces uso UIView's transitionWithView:duration:options:animations:completion: método de clase para mostrar la nueva vista. En el bloque de finalización, se eliminan la vista y el controlador de vista, lo que permite que ARC se deshaga de esa memoria (siempre que no haya otras referencias sólidas a estos objetos):

void (^theCompletion)(BOOL) = ^(BOOL finished) { 
    [oldView.view removeFromSuperview]; 
    [oldView removeFromParentViewController]; 
};

contestado el 03 de mayo de 12 a las 20:05

gracias Sr. Berna, intentaré descubrir cómo usar su código en mi proyecto: D - user1373293

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.