Baja memoria de iOS, pero muy poca memoria

Esto me ha estado molestando por mucho tiempo. Mi aplicación se ejecuta ocupando aproximadamente 2,74 MB de memoria. Esta bien. Pero luego, cuando crea un UIWebView, sube a alrededor de 5.87MB y luego se cuelga. Esos son los valores dados en Live Bytes in Instruments mientras se ejecuta en mi 1st gen iPad.

No hay ningún registro de locking que pueda encontrar. Lo siguiente es de la consola:

MyApp[1205] : Received memory warning. Level=1 MyApp[1205] : applicationDidReceiveMemoryWarning SpringBoard[30] : Received memory warning. Level=1 MobileMail[1199] : Received memory warning. Level=1 configd[26] : jetsam: kernel memory event (95), free: 428, active: 1853, inactive: 1011, purgeable: 338, wired: 15122 configd[26] : jetsam: kernel termination snapshot being created com.apple.launchd[1] : (UIKitApplication:com.apple.mobilemail[0x8966]) Exited: Killed: 9 com.apple.launchd[1] : (UIKitApplication:com.MyApp.MyApp[0xdd4f]) Exited: Killed: 9 SpringBoard[30] : Application 'Mail' exited abnormally with signal 9: Killed: 9 kernel[0] : launchd[1207] Builtin profile: MobileMail (sandbox) SpringBoard[30] : Application 'MyApp' exited abnormally with signal 9: Killed: 9 configd[26] : CaptiveNetworkSupport:UIAllowedNotifyCallback:70 uiallowed: false ReportCrash[1206] : libMobileGestalt loadBasebandMobileEquipmentInfo: CommCenter error: 1:45 ReportCrash[1206] : libMobileGestalt copyInternationalMobileEquipmentIdentity: Could not get mobile equipment info dictionary ReportCrash[1206] : Saved crashreport to /Library/Logs/CrashReporter/LowMemory-2011-05-12-160645.plist using uid: 0 gid: 0, synthetic_euid: 0 egid: 0 

He eliminado todas las llamadas a imageNamed, he cambiado las cosas de autorreleaso a alloc / release. Pero no puedo entender por qué sucede esto y me está volviendo loco.

¡Gracias por cualquier ayuda!

Es casi seguro que estás usando mucha más memoria de la que crees.

No es obvio lo que tienes que hacer para ver lo que tu aplicación realmente está usando, pero una vez que lo haces un par de veces, lo recordarás.

  1. Ejecutar con la herramienta de rendimiento de asignaciones.
  2. Haga clic en la “fila” de VM Tracker en “Asignaciones” (en la captura de pantalla)
  3. Haga clic en “Instantánea automáticamente”

Luego verá su memoria Sucia (actualmente 20.34MB en mi captura de pantalla).

Esto debería darte una idea mucho mejor de por qué tu aplicación se está abriendo. Probablemente hayas tenido una gran fuga.

¡buena suerte!

Esta captura de pantalla ayudará

Tengo dos cosas para agregar que pueden ayudar:

  1. Como se mencionó en una respuesta anterior, el bitmat de un UIImage no se considera en la cantidad de memoria que Leaks te dice que está usando tu aplicación. por lo tanto, es posible que tengas muchos UIImages que usan mucha memoria y no se muestran en el total. Mi recomendación es usar asignaciones para verificar la cantidad de objetos UIImage creados y destruidos mientras se ejecuta tu aplicación.
  2. Como se menciona en esta respuesta, use el siguiente código

     -(void) report_memory { struct task_basic_info info; mach_msg_type_number_t size = sizeof(info); kern_return_t kerr = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)&info, &size); if( kerr == KERN_SUCCESS ) { NSLog(@"Memory in use (in bytes): %u", info.resident_size); } else { NSLog(@"Error with task_info(): %s", mach_error_string(kerr)); } } 

para ver la cantidad de memoria que el sistema operativo le ha asignado a su aplicación. Ese es un número más preciso en la memoria que está usando su aplicación. (Necesitará #importar “mach / mach.h”)

¡aclamaciones!

Presionas ese botón de menú 2 veces más rápido, verás que la aplicación hace clic en la x para todas las aplicaciones y luego abres las que necesitas.