Après avoir fini de coder les parties difficiles de mon jeu, j'ai trouvé quelques bugs de gestion de la mémoire. Objects est un NSMutableArray contenant une classe personnalisée.Mon code fuit et fonctionne, ou ne fuit pas et ne se bloque pas. Cela ne semble pas être un problème d'autorelease
- (void) spawnObjects
{
for (int index = 0; index < INITIAL_OBJECTS; index++)
{
[objects addObject:[[[MatchObject alloc] initWithImageNameID:(index % 3)] autorelease]];
[[objects objectAtIndex:index] setPosition:[GameLayer randomPoint]];
}
...
}
J'utilise plus tard cette fonction.
- (void) checkAllSprites
{
NSMutableArray *spritesToDelete = [NSMutableArray array];
for (int index = 0; index < [points count] - 1; index ++)
{
for (MatchObject *planetLike in objects)
{
CGPoint point1 = [[points objectAtIndex:index] CGPointValue];
CGPoint point2 = [[points objectAtIndex:index+1] CGPointValue];
if ([GameLayer lineIntersectsCircle:point1 :point2 :[planetLike position] :16.0f])
{
ParticleSystem *planetDeath = [ParticlePlanetDeath node];
planetDeath.texture = [[TextureMgr sharedTextureMgr] addImage:@"fire.pvr"];
planetDeath.position = [planetLike position];
[self addChild:planetDeath z:0 tag:2];
[spritesToDelete addObject:planetLike];
[self removeChild:planetLike cleanup:YES];
}
}
}
[objects removeObjectsInArray:spritesToDelete];
[spritesToDelete removeAllObjects];
}
Si je n'autorelease dans la première fonction, l'application fonctionne bien. Si c'est le cas, j'essaie d'accéder à un objet désalloué ([position MatchObject]).
Qu'est-ce qui ne va pas ?!
Pouvez-vous afficher le code pour addChild et removeChild? –