39 votes

Sous le comptage automatique des références, pourquoi les fonctions de conservation, de libération et de transaction ne sont-elles pas autorisées?

Lorsque j'essaie d'utiliser -retain , -release et -dealloc lors de la création de mon application en utilisant le comptage automatique des références dans Xcode 4.2, le message d'erreur suivant s'affiche:

Le comptage automatique des références interdit l'envoi de messages explicites de 'dealloc'

Pourquoi est-ce que je vois cette erreur? Les -retain , -release et -dealloc ne sont-ils plus autorisés avec le comptage automatique des références?

67voto

Dave DeLong Points 156978

En gros:

Lors de l'utilisation de l'ARC, c'est tout ou rien. Le compilateur est la gestion de l'ensemble de la conserve/releases/deallocs pour vous, ou c'est de ne rien faire. Vous ne pouvez parsemer vos propres appels à eux, parce que le compilateur veut tout faire lui-même. Il peut faire l'absurde optimisations en faisant cela (par exemple, une méthode qui a retourné une autoreleased objet en application du Manuel de Gestion de la Mémoire peut désormais produire un objet qui ne se termine jamais dans un autorelease pool). Si vous deviez commencer à saupoudrer dans vos propres appels de conserver et de sortie, puis le compilateur aurait à travailler avec ces et ne pas être en mesure d'effectuer un grand nombre d'optimisations qu'il veut (et que vous voulez).

Et comme un bonus supplémentaire, en invoquant -retainCount est maintenant une erreur de compilation! OH HAPPY DAY!

1voto

ingconti Points 405

en réponse à AliSoftware: nous l'AIIC mélange de l'ARTC et pas de l'ARC de cadres, et aussi l'arc et pas de l'ARC de source.

(Je l'ai fait..)

Les idées de base sont: 1) le compilateur va insérer/supprimer des appels comme un très très bon cacao programmeur peut faire 2) le cacao est de toute façon le code en C, nous avons donc séparé les compilations, de sorte que le linker puisse lier les binaires produits par des sources multiples. Il pense que nous pouvons mélanger asm et le cacao, ou C et pascal...

dans les principaux avis, le Appleadvantege c# / java est ici: nous sommes toujours permet de mélanger, et, à l'aide d'un COMPILATEUR technique 8non un runtime..) on peut précipiter des performances au-delà.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X