分配NSUInteger IndexBuffer

时间:2009-04-17 22:53:56

标签: ios objective-c nsuinteger

我正在尝试通过调用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 个答案:

答案 0 :(得分:2)

您可以使用如下指针动态分配它:

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 :(得分:1)

我认为你没有做错任何事。 It's valid in C99.您可以通过查看此评估是否为真来仔细检查:

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