¿Cuáles son las diferencias entre ARC y GC?

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.

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:

  1. 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).
  2. 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

Según Chris Lattner, autor de Swift, “ARC es un algoritmo para GC” [swift-evolution] ¿Qué pasa con la recolección de basura?

ARC cuenta cuántas referencias hay apuntando a un objeto específico, cada vez que este contador llega a cero, el GC actúa libera la memoria utilizada por ese objeto, ya que ya nadie hace referencia a él.

Los dos conceptos son complementarios, no están destinados a ser comparados como formas diferentes de hacer lo mismo.

More Interesting

¿Puede Android / iOS usar un backend tranquilo para que la lógica empresarial se pueda compartir entre plataformas?

¿Cuál es la configuración de desarrollo de prueba para la aplicación iOS en las principales empresas de nueva creación?

¿Se puede crear una aplicación para iPhone sin un iPhone o iPad?

[Quickblox vs SendBird vs Layer.com] ¿Necesito tener mi propio backend?

Cómo obtener una pasantía en una empresa de desarrollo de aplicaciones móviles

¿Qué es la inyección de dependencia en Swift?

Si ya escribo aplicaciones de iOS, ¿cuánto tiempo llevará aprender el desarrollo básico de Android? ¿Valdría la pena que?

¿Qué opciones gratuitas tengo cuando quiero desarrollar aplicaciones modernas y multiplataforma (iOS, Android, navegador)?

¿Qué es la versión beta de iOS 11?

He completado el aprendizaje de Swift, pero no puedo desarrollar aplicaciones por mi cuenta. ¿Qué tengo que hacer?

Quiero convertirme en un desarrollador de iOS, así que he estado invirtiendo entre seis y ocho horas todos los días. ¿Es una mala idea teniendo en cuenta que puede afectar mis calificaciones como estudiante universitario?

¿Cuánto suelen cobrar los desarrolladores de aplicaciones de iPhone para restaurantes en India?

¿Existe un complemento de comentarios del cliente para aplicaciones de iPhone?

¿Cuáles son algunas ideas para un juego mínimo de iOS?

¿Cuál es la mejor manera de aprender iOS 7 y Swift como principiante en el mundo de la programación?