9

¿Cuál es el motivo técnico por el que ARC solo es compatible con iOS 4.0 y versiones superiores?¿Por qué ARC solo funciona para iOS 4.0+?

Tengo entendido que es una característica del compilador, que simplemente inserta automáticamente el código relacionado con la administración de memoria en lugar de requerir que el desarrollador lo haga. Por lo que he leído, las llamadas en sí mismas siguen siendo las mismas, al menos eso es lo que implica Apples Transitioning to ARC Guide.

Como tal, no debería involucrar características que no han estado presentes en versiones anteriores de iOS, y de hecho ARC funciona con iOS 4.0 a pesar de haber sido presentado más tarde.

Estoy haciendo esta pregunta por curiosidad y realmente no necesito hacer que ARC funcione con iOS 3.x.

Respuesta

16

Es por la misma razón que el recuento automático de referencias solo admite 64 bits de Snow Leopard como destino de despliegue mínimo: el soporte ARC requiere ciertas características presentes solo en una versión suficientemente nueva del tiempo de ejecución moderno. Ese tiempo de ejecución moderno se introdujo con iOS 4.0, por lo que las versiones anteriores de iOS carecen del tiempo de ejecución capaz de manejar algunas de las cosas requeridas técnicamente por ARC. Si solo se tratara de una clave para las versiones de sistema operativo, las aplicaciones de Snow Leopard de 32 bits también serían compatibles, pero solo el tiempo de ejecución de 64 bits es el más moderno.

Si mira las presentaciones de Apple desde WWDC 2011, particularmente los "Avances de Objective-C en profundidad", verá que se han realizado una serie de mejoras bajo el capó para acelerar el proceso de retención/liberación, así como cosas como la más rápida @autoreleasepool. Hay una sección completa sobre soporte de tiempo de ejecución en el LLVM ARC specification. Estas mejoras requieren más que el soporte del compilador.

Ya hemos tenido que usar el tiempo de ejecución moderno para características como la síntesis automática de variables de instancia (como se explica en Apple's documentation), por lo que esta no es una sorpresa terrible.

Incluso iOS 4.0 como un objetivo carece de soporte para referencias débiles, por lo que aquí hay problemas claramente técnicos en juego. Esta no es solo una estrategia de mercadotecnia para llevar a los desarrolladores a las versiones más nuevas, como han afirmado otros.

+1

Es poco probable que ARC requiera alguna característica del x86-64 que falta en i386 que evita su imlementación. "Técnico", "marketing", "recurso", "gestión", "práctico", etc. son todos términos subjetivos. A menos que alguien de Apple elija recoger todas las respuestas a la pregunta del OP son, en el mejor de los casos, conjeturas. De hecho, diferentes personas en Apple, dependiendo de su función, ¡probablemente tengan diferentes motivos! No hay "claramente" al respecto, tenga en cuenta el uso de "probablemente" y "adivinar" en otras respuestas. – CRD

+4

@CRD - Tal vez debería leer la documentación anterior de Apple donde dice: "Las aplicaciones para iPhone y los programas de 64 bits en Mac OS X v10.5 y posterior usan la versión moderna del tiempo de ejecución. Otros programas (programas de 32 bits en Mac) Escritorio OS X) usa la versión heredada del tiempo de ejecución ". Esto no se trata de x86-64 frente a i386, se trata de capacidades de tiempo de ejecución. Como ya mencioné, existen diferencias técnicas entre las versiones de tiempo de ejecución incluidas con cada sistema operativo, y se necesita una versión lo suficientemente nueva del tiempo de ejecución para admitir ARC. No es posible respaldar los tiempos de ejecución más recientes con versiones anteriores del sistema operativo. –

+0

excepto que ARC no se ejecuta en 10.5 ... que usa el tiempo de ejecución moderno ... y ¿por qué el tiempo de ejecución moderno no se ejecuta en i386 ... etc. Terminaremos discutiendo Turing integridad próximamente :-) – CRD

2

El tipo de una misma pregunta sería:

¿Por qué es compatible solo con iOS 4.0+ y Mac OS X 10.7 (Lion) +?

Ha simuladores de iOS 5.0 (y 4.0 obviamente) en Mac OS X 10.6.7 (Snow Leopard) donde se puede utilizar fácilmente NSRegularExpression completamente de trabajo, pero no es soportado por Mac OS X 10.6.7 en sí.

Y en relación con su pregunta: ARC se presentó con iOS 5.0. En ese momento ya no había muchos usuarios de iOS 3.x, así que mi opinión es que Apple era un poco perezoso para hacer ARC compatible con iOS 3.x.

4

El docs of Apple indica que el encadenamiento dealloc a super se maneja en tiempo de ejecución en el caso de ARC.

Cuestiones relacionadas