2 votes

Gestion différente de la mémoire ARC / pas d'ARC

Je dois convertir un simple code ARC en code non ARC. Alors que c'était relativement simple, j'ai manqué une affectation de variable d'instance self.var = xxx, à la place j'ai écrit var = xxx.

Alors que dans la version ARC, il n'a pas causé de problème, dans la version non ARC, il a certainement provoqué un crash.

Cela signifie-t-il qu'il est possible d'assigner des variables d'instance dans l'ARC sans le self, afin qu'elles soient conservées ?

Gracias.

ps quelle est la meilleure source pour apprendre à programmer en ARC afin d'éviter les erreurs évidentes - jusqu'à présent je n'ai pas trouvé de problème du tout mais je commence à avoir peur d'avoir manqué quelque chose.

1voto

Kazuki Sakamoto Points 10100

Cela signifie-t-il qu'il est possible d'assigner des variables d'instance dans l'ARC sans le self, afin qu'elles soient conservées ?

Oui, en quelque sorte.

id obj_;

C'est comme ça.

id __strong obj_;

obj_ a une référence forte pour l'objet assigné. L'objet assigné ne sera pas désalloué tant que l'objet propriétaire de l'ivar ne sera pas désalloué.

Veuillez vous référer à Document LLVM ou la référence de l'ARC d'Apple qui est toujours sous NDA.

0voto

iosRider Points 2796

enter image description here

enter image description here

Le comptage automatique des références interdit l'envoi d'un message explicite de "dealloc".

J'ai partagé une astuce pour activer la compilation des anciennes bibliothèques dans le nouveau SDK iOS5.

Cliquez sur le projet.

Cliquez sur la cible.

Sélectionnez l'onglet des phases de construction.

Sélectionnez les fichiers multiples dans lesquels vous voulez désactiver l'ARC.

Appuyez sur la touche ENTER / Appuyez sur la touche Enter

Tapez "-fno-objc-arc" ( sans les guillemets, comme indiqué dans l'image )

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