Muchas veces nos preguntamos o dudamos del porqué son los sistemas operativos de Apple tan estables y fiables. Quizás sabemos que es estable, pero no tenemos claro el porqué, o como lo hacen para serlo. Hay muchos detalles y hay muchas razones, pero una muy importante es la gestión de la memoria de los dispositivos. Los lenguajes de programación de Apple, basados en C y Obejective-C tienen una especie de gestión de memoria que, hasta no hace mucho, era una gestión manual, el programador tomaba y dejaba espacios de memoria según le convenía.
La buena y correcta gestión de la memoria, el secreto de Apple
Esto significa que cuando hacemos una aplicación o el propio sistema operativo instancia un objeto nuevo (instanciar es crear, un objeto en programación puede ser una aplicación entera o puede ser un articulo de una lista por ejemplo (la propia lista sería ser otro objeto)), lo que estamos haciendo es reservar un espacio de memoria y ocuparlo debidamente. Pero antes, debíamos tener en cuenta esta manipulación de la memoria, ya que si destruimos un objeto, debemos liberar ese espacio en la memoria para no acumular “basura” y eso hay que hacerlo. Eso ahora es automático y lo hace Xcode con el ARC, que es un sistema de gestión de la memoria. Esto optimiza al sistema operativo en un porcentaje muy elevado. Suena a algo lógico ¿verdad?.
Para no ser demasiado “profundo”, decir que con la gestión de memoria tanto en las aplicaciones como en el sistema operativo, lo que hacemos es gobernar correctamente nuestros recursos, de ahí que evitemos que nuestro ordenador se “cuelgue” ya que estamos controlando en todo momento, por ejemplo, pues eso, la gestión de la memoria. Algo un tanto importante.
Un ejemplo general en Mac es, que podemos abrir tantas aplicaciones como queramos, y dejarlas abiertas…. Macintosh, irá por detrás de nosotros cerrando aquellas aplicaciones que no usamos pero que hemos dejado abiertas. Con esto, la gestión de la memoria será siempre la correcta, y nuestro Mac rendirá al 100%…
Pero seguro que os preguntáis una cosita respecto a esto. Y un ejemplo muy claro lo tenemos con iOS. Con un iPhone, por ejemplo, abrimos muchas aplicaciones y las tenemos todas disponibles en la multitarea (Haciendo doble click en el botón de inicio). Si hacemos esto, pasamos de una a otra y todas están abiertas siempre… ¿o no?
Pues no, no están todas abiertas, solo dos o tres son las que están realmente abiertas a la vez (y no siempre). ¿pero entonces como es que yo voy de una app a otra y están todas aparentemente abiertas siempre?
Hay un truco para eso, y es que iOS, cuando dejamos una aplicación para ir a otra, hace una captura de imagen de la aplicación que abandonamos y nos abre la siguiente aplicación. Bien, así se hace con todas las aplicaciones que vayamos abriendo y dejando en segundo plano, iOS hará una captura de pantalla de la aplicación en el momento en la que la dejamos atrás. Digamos que memoriza lo ultimo que estábamos haciendo con una captura de pantalla de cada aplicación que abandonamos.
Cuando hacemos la multitarea, lo que realmente vemos no son las aplicaciones funcionando, lo que vemos son los iconos y las capturas de pantalla que iOS hizo cuando pasamos de una a otra. Y el truco está en que cuando volvemos a una app que habíamos dejado olvidada, iOS abre rápidamente la aplicación (abre una instancia de esa aplicación), pero como nos ha dejado una imagen de lo ultimo que estábamos haciendo, creemos que la app esta aun abierta. Pero no, la app se cerró y se vuelve a abrir mientras iOS nos muestra esa ultima imagen, así creemos que nunca se cerró.
Para completar el truco, iOS le “dice” a la aplicación que dejamos atrás, que esta va a pasar a segundo plano, por lo tanto la aplicación queda advertida y procede a guardar los datos y a memorizar en qué pantalla el usuario se ha quedado antes de irse a otra app. Con este método cuando se vuelve a abrir la aplicación, esta ya sabe en que pantalla dejarnos, que coincide con la captura que iOS hizo y que nos dejo puesta en la multitarea.
Resumiendo, solo dos o tres apps están abiertas a la vez. iOS gestiona esto así para tener siempre libre suficiente memoria como para garantizar un buen funcionamiento. Las apps que creemos que siguen abiertas, realmente se cerraron, pero iOS nos deja una captura de imagen de las apps que vamos dejando en segundo y tercer plano. Si volvemos a ellas, iOS lo que hace es que por detrás de esa imagen abre la aplicación de nuevo rápidamente. Como la aplicación fue informada por iOS de que pasaba a segundo plano, la aplicación memorizó en ese momento en que estado y pantalla se ha quedado el usuario. Con eso, hecho rápido y bien, creemos que las aplicaciones siempre están abiertas.
Haced la prueba, cerrad una app, y abrid otras. Cuando volváis fijaos que la vuelta nunca es instantánea e incluso notareis como hay un fundido encadenado de la imagen que vemos de la multitarea con la que aparece como nueva. Ojo, tened presente que iOS no cierra al app en el mismo instante que nos vamos a otra, la mantiene abierta un pequeño tiempo, cuestión de pocos minutos, si no volvemos a ella en ese tiempo, entonces ya si es advertida y cerrada por iOS. Es decir, iOS avisa a las apps de que van a ser cerradas, para que estas hagan lo que crean que deben de hacer.
No quiero alargarme mucho, otro día daré mas datos sobre esto, pero tanto en Mac OS X como en iOS, la gestión de las apps y de la memoria se hace así. Con lo cual tenemos un sistema operativo que se auto-protege, que se auto-gestiona y que no le permite al usuario que le deje KO con un exceso de uso de memoria. Pero por contra, tiene trucos como el que os he comentado que le hacen ser especial.
Siempre Apple… no lo dudéis.