iphone - sistemas - que es mejor android o ios 2017
iOS4: cambio de contexto rĂ¡pido (2)
Cuando la aplicación entra en estado de funcionamiento en segundo plano, la cantidad de usos sucios de memoria es buena. En apple video se menciona que la memoria sucia debe reducirse tanto como podamos.
Pero en mi aplicación, estoy usando el controlador de navegación para pulsar y mostrar vistas. Después de pasar de aproximadamente 20 páginas diferentes, los usos de memoria sucia alcanzan los 30 MB más o menos.
También en "dismissModalViewControllerAnimated" y "popViewControllerAnimated", no se llama dealloc.
Tengo dos dudas:
- ¿Con cuánta memoria sucia es aceptable para entrar en funcionamiento?
- ¿Cuál es el controlador de navegación alternativo que admite el botón Atrás?
Gracias por adelantado.
- Cuando un iOS comienza a quedarse sin memoria, intenta eliminar los procesos en segundo plano que están usando la mayor cantidad de memoria. Entonces, aunque no existe un número absolutamente bueno, es buena idea minimizar la cantidad de memoria que usa. Dejarlo en 30Mb equivale a garantizar que tu aplicación será asesinada
- A menos que desee cambiar su UI, no es necesario usar nada que no sea un
UINavigationController
para manejar su botón Atrás. Creo que el problema aquí es que si no se llama adealloc
en un pop o se descarta, tiene una pérdida de memoria
Casi todos los controladores de vista tienen datos que están efectivamente almacenados en caché y pueden regenerarse cuando la aplicación vuelve al primer plano. Piense en los datos que publica cuando recibe una advertencia de memoria cuando se ejecuta la aplicación. (Estás respondiendo a las advertencias de memoria, ¿no?) Son esas cosas las que deberían publicarse cuando pasas a un segundo plano.
Es posible que aún tenga sus UIViewControllers retenidos si no se llama a dealloc.
Tal vez esté configurando delegados u otras clases en estos UIViewControllers que conservaron y referenciaron una copia de seguridad del árbol (referencias circulares).
Una forma de solucionar este problema es sobrecargar y retener en su UIViewController, establecer un punto de interrupción y registrar el valor de retención.
Aquí hay un fragmento mágico que dejo corriendo que me ayuda mucho cuando no puedo entender por qué todavía estoy reteniendo algo.
- (id)retain
{
NSLog(@"retain /t%s /tretainCount: %i", __PRETTY_FUNCTION__ , [self retainCount]);
return [super retain];
}
- (void)release
{
NSLog(@"release /t%s /tretainCount: %i", __PRETTY_FUNCTION__ , [self retainCount]);
[super release];
}
- (id)autorelease
{
NSLog(@"autorelease /t%s /tretainCount: %i", __PRETTY_FUNCTION__ , [self retainCount]);
return [super autorelease];
}
__PRETTY_FUNCTION__
es una macro oculta especial en CLang que da un bonito nombre de función Objective-C como una matriz char.