Sin duda, esto es un seguimiento de la respuesta de Franklin Veaux a ¿Qué es exactamente lo que hace que iOS sea más eficiente?
Garbage Collection es un sistema que permite a un programador asignar recursos sin tener que desasignarlos explícitamente.
El conteo automático de referencias es una técnica para hacer esto: cada objeto se marca con un recuento de cuántos otros objetos mantienen una referencia a él. Tan pronto como el recuento de referencia llegue a cero, el objeto puede ser desasignado.
- ¿Qué es mejor, desarrollo de aplicaciones nativas versus aplicaciones multiplataforma?
- Cómo crear un medidor de nivel estéreo para iOS usando solo Swift
- ¿Por qué está tan terriblemente diseñado iOS 10?
- Cómo transmitir pantalla en iOS 11
- ¿Cuál es el mejor enfoque para crear un controlador de barra de pestañas personalizado?
Una ventaja de esto es que es extremadamente simple: nunca tiene que hacer una cantidad excesiva de trabajo y, sin embargo, la mayoría de las veces, sabe de inmediato cuando un objeto ya no se usa.
La desventaja es que no detecta cuándo los objetos se refieren cíclicamente: es posible que los objetos a los que no se hace referencia desde cualquier parte de su programa no se eliminen cuando todavía se referencian entre sí.
Java tiene un recolector de basura más general que Swift; uno que también puede detectar ese tipo de casos. El inconveniente es que tiene que pasar algún tiempo de vez en cuando para buscar objetos que se desasignarán. Esto sucede en momentos impredecibles, lo que puede hacer que los programas Java no funcionen tan bien como uno quisiera, si sucede justo en el medio de una operación crítica de tiempo, y el programador no podría hacer mucho al respecto. (Por cierto, esta es una de las razones por las que los desarrolladores de juegos nunca han adquirido gusto por Java).
Debo decir que si bien esto puede explicar en parte algunos inconvenientes que uno puede experimentar en los sistemas Android, hay muchas otras diferencias tanto en hardware como en software entre esos dos sistemas que estoy seguro de que hay muchas razones para cualquier diferencia de capacidad de respuesta.
Otros dos ejemplos de diferencias entre las dos plataformas que creo son fácilmente tan importantes:
- Swift se compila en código nativo que se ejecuta en el tiempo de ejecución de ObjectiveC, mientras que Java se compila en bytecode, que se ejecuta utilizando un entorno JIT (Just-In-Time).
- Como se explica en el siguiente enlace, el iPhone tiene una latencia de pantalla táctil mucho más pequeña, lo que se traduciría en una experiencia notablemente más cómoda en ese dispositivo también. (No estoy seguro si la latencia más baja es consecuencia de un hardware diferente o un mejor controlador de pantalla táctil).
La pantalla táctil del iPhone 5 de Apple es 2.5 veces más rápida que los dispositivos Android