una tradicional tipos textuales sistema referencias hacer formato ejemplos como citas citacion cita bibliograficas bibliografica bibliografia apa objective-c automatic-ref-counting

objective c - tradicional - En el recuento automático de referencias, ¿por qué no se permiten retener, liberar y desasignar?



sistema de citacion tradicional (4)

Cuando intento utilizar -retain , -retain , y -dealloc mientras construyo mi aplicación utilizando el recuento automático de referencias en Xcode 4.2, me sale un error como el siguiente:

El conteo automático de referencias prohíbe el envío explícito de mensajes de ''dealloc''

¿Por qué estoy viendo este error? Are -retain , -retain , y -dealloc ya no están permitidos en el conteo automático de referencias?


Básicamente:

Cuando se usa ARC, es todo o nada. O bien el compilador está administrando todas las retenciones / releases / deallocs por usted, o no está haciendo nada. No puede intercalar sus propias llamadas a ellos, porque el compilador quiere hacerlo todo por sí mismo. Puede hacer optimizaciones absurdas al hacer esto (por ejemplo, un método que devuelve un objeto liberado automáticamente en Gestión de memoria manual ahora puede producir un objeto que nunca termina en un grupo de liberación automática). Si comenzaras a rociar tus propias llamadas para retenerlas y liberarlas, entonces el compilador tendría que trabajar con ellas y no podría realizar muchas de las optimizaciones que desea (y que deberías desear).

¡Y como una ventaja adicional, invocar -retainCount ahora es un error de compilación! ¡OH DIA FELIZ!


Como señalé en mi answer en answer , puede compilar archivos fuente específicos como no ARC . La respuesta de es un poco desalentadora. No incluye el hecho de que puede indicar al compilador que compile el origen como no ARC en un proyecto habilitado para ARC (como se explica answer ).


En el recuento automático de referencias, no se permite retener, liberar ni destrabar.

Si tiene un código existente, puede seguir utilizándolo tal como está con -fno-objc-arc, puede inhabilitar ARC selectivamente en cualquier archivo.

Si desea deshabilitar ARC en archivos MÚLTIPLES:

Seleccione los archivos deseados en Target / Build Phases / Compile Sources en Xcode PRESIONE ENTER. (Hacer doble clic selecciona solo un archivo) Tipo -fno-objc-arc Presione Enter o Done


en respuesta a AliSoftware: nosotros CNA mezcla ARTC y frameworks no ARC, y también fuente ARC y no ARC.

(Lo hice..)

Las ideas básicas son: 1) el compilador insertará / eliminará llamadas como lo puede hacer un programador de cacao muy bueno 2) el cacao es CUALQUIER código C, por lo que tenemos compilaciones separadas, por lo que el enlazador PUEDE enlazar binarios producidos por múltiples fuentes. Piensa como podemos mezclar asm y cacao, o C y pascal ...

en opinión principal, el Appleadvantege sobre c # / java está aquí: siempre se permite mezclar, y, utilizando una técnica COMPILER 8non en tiempo de ejecución ...) podemos acelerar el rendimiento más allá.