2011-11-11 91 views
1

我正在製作一個具有二維棋盤的遊戲,每個棋子都有一個布爾屬性(佔用/未佔用)。我在想最好的方法是創建一個簡單的布爾數組。這比創建可變陣列效率更高。我只是困惑最好的方式來實現這一點。問題在於,我不知道板的大小,直到我初始化板對象。 接口看起來是這樣的:目標C布爾值數組

@interface TouchBoard : NSObject{ 
NSInteger height,width; 
BOOL dots[10][10]; 

} 

而像這樣實現:

-(id)initWithHeight:(NSInteger)rows Width:(NSInteger)columns{ 
    if (self = [super init]){ 
     height = rows; 
     width = columns; 
     dots[height][width]; 
    } 
    return self; 

} 

麻煩的是,在界面上,如果我嘗試申報與指數的動態數量變量的點,點[] [],它只會給我一個錯誤。 很明顯,我不知道數組的大小,直到對象被初始化爲止,但之後它不會改變,只有它的元素會從真/假更改。

完成此操作的最佳方法是什麼?

+2

使用'malloc'動態分配內存。 – titaniumdecoy

回答

6

在你的界面,宣稱:

BOOL ** dots; 

然後,你需要使用malloc,動態分配內存:

int i; 

dots = malloc(rows * sizeof(BOOL *)); 

for(i = 0; i < rows; i++) 
{ 
    dots[ i ] = calloc(columns, sizeof(BOOL)); 
} 

不要忘了在你的dealloc方法來釋放:

​​
+0

或者,你可以這樣做:'dots = malloc(rows * columns * sizeof(BOOL));' – mipadi

+0

這與ARC如何工作?我認爲我仍然需要把它放在dealloc方法中嗎? – ecbtln

+0

對。 ARC沒有問題,除非你調用super dealloc。 – Macmade