2012-03-28 4 views
2

OpenGL 다각형을 그리는 Objective C 클래스를 작성하려고합니다. 나는 내 정점 좌표를 저장하기 위해 NSMutableArray를 사용하여이 작업을 수행했습니다. 그러나 이것은 객체가 그려 질 때마다 NSMutableArray를 ccVertex2F [] 배열로 변환하기 위해 배열을 루프 할 필요가 있기 때문에 약간 비효율적 인 것으로 보입니다.Objective C 클래스 초기화에 primitive C 배열 인스턴스 변수를 할당합니다.

내가 원하는 것은 ccVertex2F 배열을 인스턴스 변수로 사용하는 것입니다. 그런 다음 초기화 할 때 크기를 포인트 수로 설정하십시오. 그러나 내 배열의 크기가 항상 0이므로이 오류가 throw됩니다.

저는 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()으로 메모리를 할당 사용할 수 있습니다

free(_glPoints); 
+0

감사합니다 : 당신이 (-dealloc 또는 다시 할당하기 전에) 완료하면

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

은 그냥 무료로 기억 답장. 그것은 완벽하게 작동했습니다! –

0

순수 C를 사용하여 할당하려는 경우 malloc 또는 calloc을 사용하여 할당하고 할당을 해제 할 수 있습니다. ccVertex2F는 오브젝티브 -c 클래스 인 경우

그래서

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

는 할당을 할

[ ccVertex2F alloc ] 

을 사용,

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

될 것입니다.