2011-09-05 2 views
0

NSArray arr이 있습니다. 그것은 NSNumber 객체를 가지고 있습니다. 나는 GNU의 GSL을 사용하여 배열에 대한 통계 분석을 계산하려고합니다. GSL은 매개 변수를 C 스타일 배열로 사용합니다.NSArray의 객체에서 C 스타일 배열 가져 오기

예를 들어 NSArray 객체의 모든 객체에서 'intValue'를 실행하고 그 결과를 C 스타일 배열로 변환 할 수있는 메커니즘이 있습니까?

NSArray의 내용을 C 스타일 배열로 복사하고 싶지 않습니다. 공간과 순환이 낭비되어 대안을 찾고 있습니다.

답변

4

설명하는 메커니즘 - NSArray의 모든 객체에 intValue을 실행하고 C 스타일 배열을 지정하는 것은 "공간과 순환의 낭비"와 정확히 똑같은 것 같습니다. 이것은 C 스타일의 int 배열이 필요한 경우에도이를 수행하는 유일한 방법입니다. 가장 좋은 방법은 내가 생각할 수 :

int *c_array = malloc(sizeof(int) * [yourArray count]); 
[yourArray enumerateObjectsWithOptions:NSEnumerationConcurrent 
          usingBlock:^(id number, NSUInteger index, BOOL *unused) { 
    c_array[index] = [number intValue]; 
}]; 
+0

콘텐츠에 직접 액세스 할 수 있기를 기대했습니다. – David

+0

전달 된 배열을 변수로 설정하고 [] 연산자를 오버로드하는 Objective-C++ 클래스를 만드는 것이 합리적입니까? 나는 가능하다면 그것을 어떻게하는지 알아 내려고 노력해 왔습니다. 이렇게 메모리를 할당하는 것을 피하고 열거 형에서 조금 더 빨라지는 것처럼 보입니다. 복사 할 필요가없고 읽는 것을 반복 할 필요가 없습니다. 그냥 직접 읽으십시오. – David

0

이 시도 : 당신에게 NSNumbers의 C-배열을 제공

id *numArray = calloc(sizeof(id), yourArray.count); 
[yourArray getObjects: numArray range: NSMakeRange(0, yourArray.count)]; 

합니다.

int *numArray = calloc(sizeof(int), yourArray.count); 
for (int i = 0; i< yourArray.count; i++) 
    numArray[i] = [[yourArray objectAtIndex: i] intValue]; 

int 배열로 직접 C 배열을 반환하도록 yourArray에 지시 할 방법이 없습니다. NSArray는 ID라는 것을 제외하고는 내용에 대한 개념이 없으며 적절한 시간에 유지되고 해제되어야합니다. 그것은 첫 번째 예제에서와 같이 C 배열의 ID를 반환 할 수 있습니다.

내부 C 배열에 int (또는 float 또는 double 등)를 직접 포함하는 간단한 배열 클래스를 작성할 수도 있지만 이에 대한 스톡 클래스는 없습니다.