편집 : 토미의 코멘트 덜 악한 방법 의례를 사용하도록 변경.
당신은 포인터로 정적 배열을 치료하고 NSValue
객체에 저장할 수 있습니다 : 또는
[mutableArray addObject:[NSValue valueWithPointer:lvl1]];
...
int* level = [(NSValue*)[mutableArray objectAtIndex:whatever] pointerValue];
int someContainedInt = level[index];
, 당신은 자신의 NSData
객체 각각의 배열을 포장하고 변경 가능한 배열의 사람들 저장할 수 :
을
[mutableArray addObject:[NSData dataWithBytes:lvl1 length:sizeof(int) * lengthOfArray]];
...
const int* level = (const int*) [(NSData*) [mutableArray objectAtIndex:whatever] bytes];
프랭크 C와 동의해야합니다. 왜 이러한 배열을 저장하기 위해 코코아 배열을 사용해야합니까? 전체 C 배열을 2D C 배열로 취급 할 수 없습니까? 어쨌든 정적 데이터 인 경우 NSMutableArray
의 동적 측면은 거의 불필요한 것처럼 보입니다.
static int levels[][LEVEL_SIZE] =
{
{1, 2, 3, 4, ...},
{15, 17, 19, 21, ...},
{8, 7, 6, 5, ...}
};
그렇지 않으면 :
편집 2 : - - LEVEL_SIZE
을 호출이 같은 직선 2 차원 배열을 구축 할 수있는 수준의 배열은 모두 같은 길이 인 경우 사용하여 C 배열
각각의 배열을 따로 만들고 나서 묶어야합니다.
static int level1[] = {1, 2, 3, 4, ...};
static int level2[] = {15, 17, 19, 21, ...};
static int level3[] = {8, 7, 6, 5, ...};
...
static int* levels[] = {lvl1, lvl2, lvl3, ...};
어느 쪽이든, 어느 쪽이든 u는 포인터로 한 단계 뽑아 수 있습니다
int* level = levels[0];
printf("%d\n", level[1]); // should print 2
이 시작하는 당신이 NUM_LEVELS
수준이있을 것이다 - 귀하의 경우 50 - 그래서 스틱 당신의 가변 배열에 많은 인덱스 0..49, 등 NSNumber
제품 :
NSMutableArray* levelIndices = [NSMutableArray arrayWithCapacity:NUM_LEVELS];
for (int i = 0; i < NUM_LEVELS; ++i)
[levelIndices addObject:[NSNumber numberWithInt:i]];
사용하여 계산이 배열, 점점 요구를 제거.
int* level = levels[[someNSNumber intValue]];
잇 짜잔 : 당신이 NSNumber
객체를 꺼내 때, 수준을 얻을 수있는 수준의 배열에 인덱스를 사용합니다.
NSValue + valueWithPointer : 및 [instanceOfNSValue pointerValue]를 통해 객체에 포인터를 저장할 수 있으므로 포인터와 정수의 상대 크기에 대한 가정을 할 필요가 없습니다. 그러나 포스터는 개체의 비용이 개체가 아닌 개체가되기를 원합니다. – Tommy
필자는 반드시 NSMutableArray를 사용할 필요가 없다. 단지 count, objectatindex, add/remove의 쉬운 API를 가지고있다. –
@Tommy 그 점을 지적 해 주셔서 감사 드리며 그에 따라 답변을 업데이트했습니다. – walkytalky