2010-04-09 84 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