2010-04-09 4 views
0

J'ai cherché et n'ai pas de réponse. J'ai créé un NSMutableArray et j'obtiens une erreur EXC_BAD_ACCESS dans un endroit d'accès. Ici. Ceci est dans le fichier déclare .h:NSMutableArray accès problème

NSMutableArray *buttons; 
... 
@property (nonatomic, retain)NSMutableArray *buttons; 

Et voici la synthèse et implimenting:

@synthesize buttons; 
... 
- (id)init { 
    self = [super init]; 
    if(self != nil) { 
     buttons = [[NSMutableArray alloc] init]; 
    } 
    return self; 
} 
... 
-(void)addButtonWithImage:(Image*)image { 
    Image *button = image; 
    [buttons addObject:button]; 
    [button release]; 
} 
... 
-(void)replaceButtonAt:(int)num with:(Image*)image { 
    Image *button = image; 
    [buttons replaceObjectAtIndex:num withObject:button]; <<===EXC_BAD_ACCESS 
    [button release]; 
} 

Mais quand j'utilise ceci:

-(void)renderButton:(int)num atPoint:(CGPoint)point center:(BOOL)center{ 
    Image *button = [buttons objectAtIndex:num]; 
    [button renderAtPoint:point centerOfImage:center]; 
} 

Il fonctionne

Répondre

4

puisque vous n'allouez, ne gardez, copiez jamais, etc. button vous ne devriez pas le libérer

juste se débarrasser de la [button release] s

Le Memory Management Programming Guide for Cocoa est une lecture utile si vous avez besoin de plus d'informations sur le comptage de référence.

+0

Merci, cela a fonctionné, mais je pensais depuis que j'avais stocké l'objet dans le tableau qu'il aurait un nombre de retenue de 2 et je devais l'abattre un. Ou est-ce que je stocke seulement un pointeur sur l'objet? – Danegraphics

+1

Vous ne devriez jamais vous inquiéter de ce que le nombre de retenue est. Ce que vous devriez faire est de vous assurer de libérer tout ce que vous possédez. Puisque vous ne l'attribuez pas, ne le gardez pas ou ne le copiez pas, vous ne le possédez pas. 'buttons' le conservera, mais il sera alors de la responsabilité de' buttons' de le libérer. (Il est de votre responsabilité de libérer des «boutons», cependant, comme vous l'avez «alloué») – cobbal

Questions connexes