我們可以將NSArray轉換爲c數組。 。如果替代方案是不是有什麼[假設我需要養活在OpenGL函數的C組,其中C數組包含的plist文件中讀取的頂點指針]NSArray到C數組
18
A
回答
37
答案取決於C數組的性質。
如果您需要填充的原始值的和已知長度的數組,你可以做這樣的事情:
NSArray* nsArray = [NSArray arrayWithObjects:[NSNumber numberWithInt:1],
[NSNumber numberWithInt:2],
nil];
int cArray[2];
// Fill C-array with ints
int count = [nsArray count];
for (int i = 0; i < count; ++i) {
cArray[i] = [[nsArray objectAtIndex:i] intValue];
}
// Do stuff with the C-array
NSLog(@"%d %d", cArray[0], cArray[1]);
這裏我們想從一個NSArray
創建一個新的C-陣列的例子,保持陣列項目作爲對象 - 對象:
NSArray* nsArray = [NSArray arrayWithObjects:@"First", @"Second", nil];
// Make a C-array
int count = [nsArray count];
NSString** cArray = malloc(sizeof(NSString*) * count);
for (int i = 0; i < count; ++i) {
cArray[i] = [nsArray objectAtIndex:i];
[cArray[i] retain]; // C-arrays don't automatically retain contents
}
// Do stuff with the C-array
for (int i = 0; i < count; ++i) {
NSLog(cArray[i]);
}
// Free the C-array's memory
for (int i = 0; i < count; ++i) {
[cArray[i] release];
}
free(cArray);
或者,你可能想nil
-terminate的陣列,而不是通過左右其長度:
// Make a nil-terminated C-array
int count = [nsArray count];
NSString** cArray = malloc(sizeof(NSString*) * (count + 1));
for (int i = 0; i < count; ++i) {
cArray[i] = [nsArray objectAtIndex:i];
[cArray[i] retain]; // C-arrays don't automatically retain contents
}
cArray[count] = nil;
// Do stuff with the C-array
for (NSString** item = cArray; *item; ++item) {
NSLog(*item);
}
// Free the C-array's memory
for (NSString** item = cArray; *item; ++item) {
[*item release];
}
free(cArray);
4
我會建議自己進行轉換,喜歡的東西:
NSArray * myArray;
... // code feeding myArray
id table[ [myArray count] ];
int i = 0;
for (id item in myArray)
{
table[i++] = item;
}
6
NSArray
有一個-getObjects:range:
創建一個數組子範圍的C數組的方法。
例子:
NSArray *someArray = /* .... */;
NSRange copyRange = NSMakeRange(0, [someArray count]);
id *cArray = malloc(sizeof(id *) * copyRange.length);
[someArray getObjects:cArray range:copyRange];
/* use cArray somewhere */
free(cArray);
相關問題
- 1. 從2D創建一個C數組NSArray
- 2. 是否可以將一個C數組添加到NSArray?
- 3. 將Json數組分配到NSArray(JSONKit)
- 4. 從plist數組創建NSArray
- 5. 排序數組(NSArray)降序
- 6. NSArray運行時數組
- 7. C#數組到javascript數組
- 8. mpz_t到數組數組C++
- 9. Python數組到C數組
- 10. 將C++數組移植到C#數組
- 11. NSArray到核心數據項
- 12. Objective-C中使用NSArray的指針數組
- 13. 如何將c樣式char *數組轉換爲NSArray?
- 14. 從NSArray的對象獲取C風格的數組
- 15. 的NSMutableArray到的NSArray在目標C
- 16. 目標C - 的NSDictionary的NSArray到
- 17. 將NSArray從Objective C傳遞到Javascript
- 18. NSArray與C類型?
- 19. 的NSArray(目標C)
- 20. Objective-C NSArray,Block,STAssertEquals
- 21. C++ wchar數組到c#
- 22. C++到C#數組聲明
- 23. C#列到數組
- 24. C++數組[從:到]
- 25. JSON到數組C#
- 26. 編組C/C++函數參數到C#
- 27. 如何將JSON數組轉換爲NSArray
- 28. 使用NSArray初始化對象數組
- 29. 作爲二維數組的NSArray
- 30. 排序NSArray的由包含在數組
這是一個偉大的答案,我希望我能投了不止一次。我確實有一個建議,即使用'NSString **'類型有點混淆。我建議使用帶有malloc返回指針的`[NSData initWithBytesNoCopy:length:freeWhenDone:]`和數組的大小。 – alfwatt 2011-09-29 20:18:59
我試過使用malloc的第二種方法,我認爲它需要禁用弧。至少,這是我如何運作的。當問這個問題時,也許arc不存在...... – 2017-01-23 08:53:32