2010-04-09 154 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]小号

Memory Management Programming Guide for Cocoa是一个有用的阅读,如果您需要引用计数的详细信息的。

+0

谢谢,这工作,但我认为,因为我已经将对象存储在数组中,它将有一个保留计数为2,我不得不把它放下一个。或者我只存储一个指向该对象的指针? – Danegraphics 2010-04-09 12:26:05

+1

你永远不应该担心保留数是多少。你应该做的是确保释放你拥有的任何东西。既然你没有分配,保留或复制它,你不拥有它。 'buttons'会保留它,但它将由''buttons'释放它。 (然而,当你分配它时,你有责任释放'buttons') – cobbal 2010-04-09 14:15:54