2010-06-11 2 views
0

NSOperation 인스턴스에서 malloc'd 전체 데이터가 있습니다. 포인터가 있습니다 :코코아 & 코코아 터치. 일반 OLE 포인터로 NSData 객체를 만드는 방법은 무엇입니까?

data = malloc(humungous_amounts_of_god_knows_what); 
uint8_t* data; 

NSData 인스턴스로 이것을 어떻게 패키지화하고 메인 스레드로 리턴합니까? NSData 인스턴스로 변환 한 후 간단히 호출 할 수 있다고 가정합니다.

free(data); 

예?

또한 메인 스레드로 돌아가서 어떻게 포인터를 검색합니까?

감사합니다,
더그

답변

0

감사 배리, (나는 NSData 문서와 몇 분은 당신을 잘 될 것입니다 생각한다). 나는 완료있을 때, 다시 메인 스레드에서

[result setObject:value forKey:cubicFaceName]; 

:

포인터 주위 NSValue 래퍼를 넣어 :

NSValue *value = [NSValue valueWithPointer:imageData]; 

물건을 사전에 메인 쓰레드에 반환되는 데이터와 나는 그것을 폐기 :

uint8_t *bits = [value pointerValue]; 
free(bits); 

건배더그

1

당신은 -dataWithBytes:length: 또는 그 변종 중 하나 싶어 :

NSData *d = [NSData dataWithBytes:data length:lengthOfDataInBytes]; 

복사 바이트는 다음 free(data)을 할 수 있습니다. malloc 사용을 사용하여 할당 data 가정, 복사본을 저장하려면 :

NSData *d = [NSData dataWithBytesNoCopy:data length:lengthOfDataInBytes]; 

을 당신은 하지 전화 freeNSData 인스턴스로이 경우에 버퍼에 당신을 위해 그것을 자유 의지해야한다.

이러한 메서드는 모두 autoreleased 인스턴스를 반환하므로 스레드간에 유지하려는 경우 (GC를 사용하지 않는 경우) 유지해야 할 수 있습니다. 대신 동등한 alloc/initWithBytes:... 이니셜 라이저를 사용할 수 있습니다.

NSData의 내용에 대한 포인터를 가져 오려면 bytes을 사용하십시오.

은 실제로 더 간단 뭔가 갔다