2012-03-28 79 views
2

我正在嘗試編寫一個繪製OpenGL多邊形的Objective C類。我設法使用NSMutableArray來存儲我的頂點座標。但是這似乎有點低效,因爲每次繪製對象時,都需要遍歷數組以將NSMutableArray轉換爲ccVertex2F []數組。Objective C在類初始化時分配原始c數組實例變量

我想要做的是將ccVertex2F數組作爲實例變量。然後在初始化時將大小設置爲點數。然而,這會引發錯誤,因爲我的數組的大小始終爲零。

我在編程Java方面很有經驗,但對C和內存管理來說是全新的。到目前爲止,這是我:

@interface PolygonNode : CCNode { 
    ccVertex2F * _glPoints ; 
} 

@property (nonatomic, readwrite) ccVertex2F * glPoints ; 
@end 

我對此的理解是,我創建一個實例變量,它是一個指向ccVertex2F。

在我的init方法,我有以下:

ccVertex2F sizedGlPoints [numberOfPoints * sizeof(ccVertex2F)]; 
    _glPoints = &sizedGlPoints; 

這樣做的目的是使實例變量指向我的新正確大小的數組。但是,當我在此代碼後打印尺寸_glPoints大小不會更改。

我想要做的核心是能夠選擇我的數組的大小,當我初始化類,以便我不浪費內存。

回答

2

您可以使用malloc爲數組分配內存:

ccVertext2F *newMemory = malloc(numberOfPoints * sizeof(ccVertex2F)); 
if (newMemory == NULL) { 
    // Handle error 
} 
_glPoints = newMemory; 

記住釋放它,當你完成(在-dealloc或再次分配之前):

free(_glPoints); 
+0

謝謝爲答覆。這工作完美! – 2012-03-28 18:39:00

0

如果您嘗試使用純C進行分配,則可以使用malloc或calloc進行分配,然後可以自由釋放。

所以

ccVertex2F sizedGlPoints [numberOfPoints * sizeof(ccVertex2F)]; 
_glPoints = &sizedGlPoints; 

將成爲

_glPoints = (ccVertex2F *) calloc(numberOfPoints, sizeof(ccVertex2F); 

如果ccVertex2F是一個類的ObjectiveC,您可以使用

[ ccVertex2F alloc ] 

做分配。