2010-04-09 2 views
0

Я искал и не получил ответа. Я создал NSMutableArray и получаю ошибку EXC_BAD_ACCESS в одном месте доступа. Здесь. Это декларирование в файле .h:NSMutableArray доступ к вопросу

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

И это синтезирование и 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]; 
} 

Но когда я использую это:

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

Он работает

ответ

4

так как вы никогда не выделяете, не сохраняете, не копируете и т. д. button его не следует отпускать

просто избавиться от [button release] s

Memory Management Programming Guide for Cocoa является полезным для чтения, если Вам необходима дополнительная информация о подсчете ссылок.

+0

Спасибо, это сработало, но я думал, так как я сохранил объект в массиве, что у него будет счетчик в 2, и мне пришлось его сбить. Или я только сохраняю указатель на объект? – Danegraphics

+1

Вы не должны беспокоиться о том, что такое счет. То, что вы должны сделать, это обязательно выпустить все, что у вас есть. Поскольку вы не выделяете, не сохраняете и не копируете его, вы не являетесь его владельцем. 'buttons' сохранит его, но тогда это будет' 'кнопки' 'отпустить его. (Вы несете ответственность за освобождение 'кнопок', однако, поскольку вы« распределяете »его) – cobbal

Смежные вопросы