我正在尝试编写一个绘制OpenGL多边形的Objective C类。我已经设法使用NSMutableArray来存储我的顶点坐标。然而,这似乎有点低效,因为每次绘制一个对象时,都需要循环遍历数组以将NSMutableArray转换为ccVertex2F []数组。
我想要做的是将ccVertex2F数组作为实例变量。然后在初始化时将大小设置为点数。但是这会引发错误,因为我的数组的大小始终为零。
我在Java编程方面经验丰富,但对C和内存管理却全新。到目前为止,这就是我所拥有的:
@interface PolygonNode : CCNode {
ccVertex2F * _glPoints ;
}
@property (nonatomic, readwrite) ccVertex2F * glPoints ;
@end
我对此的理解是我正在创建一个实例变量,它是一个指向ccVertex2F的指针。
在我的init方法中,我有以下内容:
ccVertex2F sizedGlPoints [numberOfPoints * sizeof(ccVertex2F)];
_glPoints = &sizedGlPoints;
这样做的目的是使实例变量指向我新的正确大小的数组。但是,当我在此代码后打印尺寸_glPoints大小不会改变。
我想要做的核心是在初始化类时能够选择数组的大小,这样我就不会浪费内存。
答案 0 :(得分:2)
您可以使用malloc为数组分配内存:
ccVertext2F *newMemory = malloc(numberOfPoints * sizeof(ccVertex2F));
if (newMemory == NULL) {
// Handle error
}
_glPoints = newMemory;
请记住在完成后(-dealloc
或再次分配之前)释放它:
free(_glPoints);
答案 1 :(得分:0)
如果您尝试使用纯C进行分配,则使用malloc或calloc进行分配,并可以自由解除分配。
所以
ccVertex2F sizedGlPoints [numberOfPoints * sizeof(ccVertex2F)];
_glPoints = &sizedGlPoints;
会变成
_glPoints = (ccVertex2F *) calloc( numberOfPoints, sizeof( ccVertex2F );
如果ccVertex2F是ObjectiveC类,则使用
[ ccVertex2F alloc ]
进行分配。