NSArray를 C 배열로 변환 할 수 있습니까? . 대안이 존재하지 어떤 경우에 [내가 C 배열이 PLIST 파일에서 읽어 정점 포인터를 포함 OpenGL은 기능의 C 배열을 공급해야하는 가정]NSArray를 C 배열
답변
대답은 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 배열 대신 주위의 길이를 통과 :의 Obj-C 객체로 배열 항목을 유지
// 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);
:
NSArray * myArray;
... // code feeding myArray
id table[ [myArray count] ];
int i = 0;
for (id item in myArray)
{
table[i++] = item;
}
NSArray
은 배열의 하위 범위에 대해 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);
그래도 NSNumber 개체를 원시 숫자 형식으로 변환하지 않습니다. 질문자는 C 배열을 OpenGL과 함께 사용하기 위해 변환이 필요합니다. 그 때문에 NSNumbers를 넣지 않고도 C 배열을 완전히 채울 수 있습니다. –
아! 문제에 대한 OpenGL 요구 사항을 보지 못했습니다. 이 경우 네, 배열을 수동으로 반복하는 것이 적절할 것입니다. –
- 1. NSArray를
- 2. NSArray를 사용하는 Objective-C의 포인터 배열
- 3. 의 Obj-C/아이폰 : NSArray를 질문
- 4. 액세스 NSArray를
- 5. NSArray를 NSDictionary로 변환
- 6. NSArray를 해제하는 대 NSArray를 해제하는 것
- 7. NSArray를 사용하여 TableView에
- 8. NSArray를 CALayerArray
- 9. NSArray를 모노 터치로 사용하기
- 10. sortedArrayUsingDescriptors에서 반환 한 NSArray를 릴리스해야합니까?
- 11. 목표 C 메모리 관리 문제는 NSArray를
- 12. objective-c NSArray를 UTF8로 인코딩하는 방법은 무엇입니까?
- 13. C 배열 목록 배열
- 14. Obj-C 및 다차원 배열
- 15. copyWithZone도 NSArray를 호출하여 copyWithZone을 해당 요소에 복사합니까?
- 16. iPhone | UIWebView : NSArray를 사용하여 탭 브라우징 하시겠습니까?
- 17. NSArray를 통해 뒤로 순환
- 18. UIImagerview의 NSArray를 정렬 하시겠습니까?
- 19. EXC_BAD_ACCESS 다음 코드에서, NSArray를
- 20. NSArray를 NSDate, 오늘으로 정렬합니다.
- 21. Help NSArray를 정렬하기
- 22. NSArray를 통한 반복
- 23. NSArray를 NSURLRequest에 넘겨 주십시오.
- 24. NSArray를 사용하는 NSTableView 행
- 25. NSArray를 NSData로 변환하십시오.
- 26. 창에 NSArray를 표시하십시오. IB
- 27. sortedArrayUsingFunction을 사용하여 NSArray를 정렬하십시오.
- 28. 는 어떻게 NSArray를
- 29. NSArray를 NSDictionary에 삽입하십시오.
- 30. NSArray를 통해 문자열을 검색하십시오.
이것은 좋은 대답, 내가가 한 번 이상 투표 할 수 있었으면 좋겠어. 나는'NSString **'타입의 사용이 약간 난독 화된다는 한 가지 제안을했습니다. 나는'[NSData initWithBytesNoCopy : length : freeWhenDone :]'을 사용하여 malloc이 반환하는 포인터와 배열의 크기를 제안한다. – alfwatt
malloc을 사용하는 두 번째 방법을 시도했지만 아크가 비활성화되어야한다고 생각합니다. 적어도, 그것이 내가 일하는 방법입니다. 아마이 질문을했을 때 호가 존재하지 않았다 .... –