1

J'ai rencontré un problème lorsqu'un objet que j'utilise dans un projet cocos2D box2D est écrasé par des déchets. Après un bon morceau de débogage, j'ai trouvé que si la ligne suivante a été changé de:comment puis-je déterminer si mon projet utilise le comptage automatique des références?

player = [[[Player alloc] initWithWorld:world atLocation:ccp(playerPositionX, playerPositionY)] autorelease]; 

à

player = [[Player alloc] initWithWorld:world atLocation:ccp(playerPositionX, playerPositionY)]; 

alors le problème disparaît. Ceci est très déroutant car ce code et la définition de classe sous-jacente sont plus ou moins une copie du code du projet SpaceViking décrit dans le livre Learning Cocos2D. Il m'est apparu que le problème est peut-être que lorsque j'ai créé le nouveau projet, j'ai peut-être laissé le choix pour le comptage automatique des références sélectionné, alors que je n'ai peut-être pas fait cela pour le projet SpaceViking. J'utilise actuellement xcode 4.6 et je n'arrive pas à comprendre comment déterminer si ARC est utilisé dans ce projet. Je suis allé aux paramètres de construction et j'ai cherché le comptage automatique des références, mais je n'ai pas pu le trouver.

Comment puis-je déterminer si mon projet utilise le comptage automatique des références?

+1

Vous ne pouvez pas utiliser ARC si vous êtes capable de compiler un appel à 'autorelease' Notez que vous pouvez activer/désactiver l'ARC pour des fichiers individuels – bbum

Répondre

2

Essayez ceci:

#if __has_feature(objc_arc) 
/* ARC is used */ 
#endif 
+0

Ok, je mets un CCLOG déclaration dans votre bloC#ifif #ifif suggéré et rien n'a été imprimé.Je suppose que je n'utilise pas ARC.C'est malheureux, parce que cela signifie que j'ai toujours un problème que je ca Ne pas comprendre. – JeffB6688

+0

@ JeffB6688 Essayé de compiler en utilisant le drapeau '-fobjc-arc'? Cela devrait permettre le comptage automatique des refs. –

+0

+1 pour superbe réponse :) –

1

Essayez de

[player release]; 

Il devrait vous donner "Restrictions ARC" Erreurs

+0

OK, merci. J'ai essayé cela aussi et je ne reçois aucune erreur. Donc, je suppose que je n'utilise pas ARC. C'est malheureux, parce que cela signifie que j'ai toujours un problème que je ne peux pas comprendre. – JeffB6688

+0

Ce n'est pas comme cela que l'on devrait ** vérifier ** en utilisant ARC. –

+1

Belle façon de vérifier :) ** Comment vérifier si le paradis existe réellement? -Jump de la Tour Eiffel et vérifier. ** –

1

Vous pouvez déjà vous dire que vous êtes bâtiment sans ARC: si elle était activée , votre appel à autorelease entraînerait une erreur de compilation. Cela suggère que votre problème actuel n'a rien à voir avec l'ARC, bien sûr - l'annulation de l'appel autorelease peut empêcher un objet d'être trop relâché, mais cela peut aussi causer une fuite. En plus de cela, en plus des autres méthodes qui ont été suggérées jusqu'à présent, vous pouvez également trouver l'endroit dans Xcode où l'on contrôle normalement ARC au niveau du projet ou de la cible. Sélectionnez votre projet dans le navigateur et dans l'onglet Paramètres de construction, recherchez "Comptage automatique des références Objective-C" sous "Apple LLVM Compiler 4.2 - Langue" (ou utilisez la zone de recherche en haut pour rechercher "Comptage automatique des références" ou "ARC" .Si vous utilisez un projet créé par un autre utilisateur, vous pouvez également vérifier si les indicateurs -fobjc-arc ou -fno-objc-arc sont définis au niveau du fichier, sous Phases de construction -> Compiler les sources le projet et la cible sont sélectionnés dans Xcode

Questions connexes