2010-05-24 8 views
2

Je rencontre un problème de fuite de mémoire avec le code suivant. Autant que je peux dire je ne vois pas pourquoi le problème persiste mais il ne libère toujours pas quand appelé. Je détecte le problème dans les instruments et le code suivant garde ses classes "cartes" en vie même quand il aurait dû les libérer. Toute aide bienvenue.Fuite de mémoire question

... 
... 
-(id)initDeckWithCardsPicked: (NSMutableArray*)cardsPicked andColors:(NSMutableArray*)cardColors 
    { 
     self = [self init]; 
     if (self != nil) { 
      int count = [cardsPicked count]; 
      for (int i=0; i<count; i++) { 
       int cardNum = [[cardsPicked objectAtIndex:i] integerValue]; 
       Card * card = [[MemoryCard alloc] initWithSerialNumber:cardNum position: CGPointZero color:[cardColors objectAtIndex:i]]; 
       [_cards addObject: card]; 
       [card release]; 
      } 
     } 
     return self;  
     } 

- (id) init 
{ 
    self = [super init]; 
    if (self != nil) { 
     self.bounds = (CGRect){{0,0},[Card cardSize]}; 
     self.cornerRadius = 8; 
     self.backgroundColor = kAlmostInvisibleWhiteColor; 
     self.borderColor = kHighlightColor; 
      self.cards = [NSMutableArray array]; 
     } 
      return self; 
} 
... 
... 

Répondre

0

Lorsque vous ajoutez une carte à l'aide de _cards NSMutableArray addObject, il est envoyé un message conserver. Ainsi, tant que vous gardez _cards en mémoire, un pointeur sera également conservé pour chacun de ses constituants. Tant que votre dealloc libère le tableau, ou que vous le faites ailleurs, vous devez respecter ce que vous avez posté ici (en supposant que votre méthode initWithSerialNumber renvoie un objet conservé).

+0

J'ai libéré le tableau par dealloc ... [publication de _cards]; [super dealloc]; ... mais d'après ce que je comprends la classe est référencée à partir d'ailleurs et ne permet pas la libération? – franz

1

Sans regarder le reste de votre code, il est difficile de savoir où est le problème, mais avez-vous essayé d'utiliser l'analyseur statique dans xcode? Son peut être inestimable pour trouver des fuites de mémoire. Pour l'utiliser, sélectionnez «Construire et analyser» dans le menu Générer. Plus de détails sont sur