2010-10-09 10 views
0

J'ai un Ivar tableau mutable que je configuration en viewDidLoad comme suit:Zombie messaged par [nombre de tableau]

names = [NSMutableArray arrayWithCapacity:30]; 
[names addObject:@"Joe"]; 
[names addObject:@"Dom"]; 
[names addObject:@"Bob"]; 

Puis dans une méthode plus tard, le robinet d'un bouton, je fais ce qui suit, mais le tableau semble être surchargeant ... avec Zombie messaged:

int r = arc4random() % [names count]; 
NSLog(@"%d", r); 

Comment résoudre ce problème?

Merci.

Répondre

5

+arrayWithCapacity: retournera un objet libéré automatiquement, c'est-à-dire dans la "méthode ultérieure", cet objet est probablement déjà désalloué. Vous devez conserver cet objet pour le rendre disponible "plus tard".

names = [[NSMutableArray arrayWithCapacity:30] retain]; 

(alternativement,

names = [[NSMutableArray alloc] initWithCapacity:30]; 

)

Ne pas oublier de le libérer dans -dealloc.

-(void)dealloc { 
    [names release]; 
    ... 
    [super dealloc]; 
} 
+2

'Si l'on suppose names' est un iVar et il y a un setter correspondant ou un' @ property', 'self.names = [tableau NSMutableArray],' fonctionnerait aussi. – bbum