分配一个NSUInteger IndexBuffer
问题描述:
我试图找回致电-getIndexes:maxCount:indexRange
分配一个NSUInteger IndexBuffer
我NSIndexSet
这里是我的代码
const NSUInteger arrayCount = picturesArray.count;
NSUInteger theIndexBuffer[arrayCount];
[picturesArray getIndexes:theIndexBuffer maxCount:arrayCount inIndexRange:nil];
然而,在调试器中IndexBuffer
总是显示为-1
。当我用一个像NSUInteger theIndexBuffer[10]
这样的静态数字初始化它时,我得到了一个正确的实例。
这可能是因为它不知道编译时arrayCount
是什么。
这样做的正确方法是什么?
答
可以使用这样的指针动态分配的:
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
只是不要忘记释放它时,你就大功告成了。
答
我不认为你做错了什么。 It's valid in C99.您可以通过查看这是否评估为真来进行仔细检查:
sizeof(theIndexBuffer) == arrayCount * sizeof(NSUInteger)