J'essaie d'écrire ma petite application et de rencontrer des problèmes de gestion de la mémoire. Au début, j'ai Game
objet singleton à la propriété:Gestion de la mémoire de la propriété de Singleton
//Game.h
@interface Game : NSObject
@property (nonatomic, retain) MapBuildingsLayer *mapBuildingsLayer;
+(Game *) game;
-(BOOL) addObject:(NSString *) objName At:(CGPoint) pt;
@end
où MapBuildingsLayer
est juste Cocos2d CCLayer
exemple
//Game.m
@implementation Game
@synthesize mapBuildingsLayer = _mapBuildingsLayer;
static Game *instance = nil;
+ (Game *)game {
@synchronized(self) {
if (instance == nil) {
instance = [[Game alloc] init];
}
}
return instance;
}
-(BOOL) addObject:(NSString *)objName At:(CGPoint)pt
{
if([objName isEqualToString:OBJ_TYPE_PIT])
{
if([[Game game].mapBuildingsLayer addPitAt:pt]) //app crashes here
{
[self toggleConstructionMode];
return YES;
}
}
return NO;
}
@end
Dans MapBuildingsLayer.m
'méthode de init
J'utilise Game
' mapBuildingsLayer
propriété de stocker une référence à cette instance CCLayer dans mon singleton (pour une utilisation future dans d'autres méthodes):
//MapBuildingsLayer.m
@implementation MapBuildingsLayer
-(id) init
{
if((self=[super init])) {
[Game game].mapBuildingsLayer = self;
}
return self;
}
Lorsque j'appelle la méthode addObject:objName At:
de Game
, mon application tombe en panne avec EXC_BAD_ACCESS
. Comment dois-je déclarer la propriété dans Game
singleton pour l'utiliser à partir d'autres endroits dans la vie de mon application?
Essayez d'activer NSZombieEnabled et voir quelle information supplémentaire qui vous donne (http: // stackoverflow.com/questions/2190227/how-do-i-set-nszombieenabled-in-xcode-4) – Rengers
@Rengers L'activation de zombies n'ajoute aucune ligne supplémentaire au journal de débogage. –
où mapBuildingLayer est-il alloué init? – bryanmac