2010-12-04 10 views
0

iPhone SDK의 ObjectiveC에서 2D 배열의 동적 메모리 할당 예제가 필요합니다. 샘플 코드는 높이 평가됩니다. 포인터의 배열을 선언하고 각 인덱스는 런타임에 배열을 선언합니다.2D 동적 메모리 할당 - ObjectiveC

감사 NSArrays를 들어

+1

C 배열 또는 NSArrays에 대해 이야기하고 있습니까? –

+0

NSArrays, 나는 포인터의 배열을 선언하고 각 포인터는 배열을 가리키고 싶다. –

답변

4

은 C 배열과 NSArrays을 공모 할 이상이지만, 수행 할 수 있습니다

NSMutableArray *myArrays[]; 
myArrays = malloc(sizeof(NSMutableArray *) * numberOfArrays); 

더 나은 솔루션이 NSArrays의있는 NSArray를 사용하는 것 중 하나;

NSMutableArray *rows = [NSMutableArray array]; 
[rows addObject: [NSMutableArray array]]; 
[rows addObject: [NSMutableArray array]]; 
[rows addObject: [NSMutableArray array]]; 

NSMutableArray *row0 = [rows objectAtIndex: 0]; 
[row0 addObject: [Datum new]]; 
[row0 addObject: [Datum new]]; 
[row0 addObject: [Datum new]]; 

.... .... 등

아니면 그냥 직접 포인터 배열을 사용

Datum **my2DArray = malloc(sizeof(Datum *) * width * height); 

이어서, 특정 직교 my2DArray 내의 좌표의 간단한 비트이고 수학 :

my2DArray[ x + (y * width) ] = ....; 

그러면 주어진 (x, y) 좌표를 선형 x (실제로 y는 스트라이드가되고 x는 스트라이드 내의 오프셋이됩니다).

-1

는이 같은 것을 사용할 수 있습니다 : 당신이 동적 데이터에 의해 다른 것을 의미하는 경우

NSMutableArray *array2d = [[NSMutableArray alloc] init]; 
for (int i = 0; i < d1; i++) 
{ 
     NSMutableArray *innerArray = [NSMutableArray array]; 
     [array2D addObject:innerArray]; 

     for (int j = 0; j < d2; j++) 
     { 
      [innerArray addObject:myDynamicData]; 
     } 
} 

는 다음 뜻을 정확히 설명하는 영업 이익을 편집하십시오.

+2

* "모든 배열은 컴파일 할 때 지정된 크기를 가져야합니다."* - C99에는 VLA가 있으며 GCC는 이미 확장으로 더 오래 지원했습니다. 게다가 * 동적 배열 *, 즉 힙 할당 배열을 가질 수 있습니다. –

+0

또한 내부 루프는 'array2d'에 객체를 추가해서는 안되며 새로 추가 된 배열을 추가해야합니다. –

+0

[[[NSMutableArray alloc] init] autorelease] 대신 [NSMutableArray array] 편리한 메소드를 사용하십시오. 더 짧고 간결합니다. – zaph

0

물론 C는 동적 메모리 할당을 사용합니다. malloc과 realloc을 보라. 이 기능을 사용하면 메모리를 할당하고 필요할 경우 나중에 크기를 조정할 수 있습니다. 모든 메모리 사용량을 추적하고 완료 한 후에는()를 잊지 마세요.