Выделение NSUInteger IndexBuffer - PullRequest
       30

Выделение NSUInteger IndexBuffer

1 голос
/ 18 апреля 2009

Я пытаюсь получить мой NSIndexSet, позвонив по номеру -getIndexes:maxCount:indexRange

Вот мой код

const NSUInteger arrayCount = picturesArray.count;
NSUInteger theIndexBuffer[arrayCount];      
[picturesArray getIndexes:theIndexBuffer maxCount:arrayCount inIndexRange:nil];

Однако в отладчике IndexBuffer всегда отображается как -1. Когда я инициализирую его статическим числом, таким как NSUInteger theIndexBuffer[10], я получаю правильный экземпляр.

Вероятно, это потому, что он не знает, что такое arrayCount во время компиляции.
Как правильно это сделать?

Ответы [ 2 ]

2 голосов
/ 18 апреля 2009

Вы можете динамически распределить его, используя указатель, подобный этому:

NSUInteger *theIndexBuffer = (NSUInteger *)calloc(picturesArray.count, sizeof(NSUInteger));
// Use your array however you were going to use it before
free(theIndexBuffer); // make sure you free the allocation

В C, даже если это динамически размещаемый буфер, вы можете использовать операторы индексов массива и (по большей части) делать вид, что это просто массив. Итак, если вы хотите получить третий элемент, вы можете написать:

NSUInteger thirdElement = theIndexBuffer[2]; // arrays are 0-indexed

Только не забудьте освободить его, когда закончите.

1 голос
/ 18 апреля 2009

Я не думаю, что вы сделали что-то не так. Это действительно в C99. Вы можете проверить дважды, посмотрев, оценивается ли это как истинное:

sizeof(theIndexBuffer) == arrayCount * sizeof(NSUInteger)
...