2009-04-19 5 views
3

나는 다음과 같은 코드를 가지고 : "나는 변환하려면 어떻게캐스트 "CONST의 무효 *"을 "CONST 문자 *"

- (void)_loadData:(const char *)data; 

:

NSData *data = [NSData dataWithContentsOfURL:objURL]; 
const void *buffer = [data bytes]; 
[self _loadData:buffer]; 
[data release]; 

는"_loadData는 "기능과 같은 인수를 취 const void "을 Objective-C의"const char "으로 변경 하시겠습니까?

+0

[데이터 릴리스]; 라인은 불필요합니다. 가비지 수집이 아닌 환경에서는 응용 프로그램이 충돌하고 Cocoa 메모리 관리를 완전히 이해하지 못한다는 것을 보여줍니다. 명시 적으로 alloc, copy 또는 mutableCopy (아마도 지금은 생각할 수없는 다른 것)를 호출 한 경우에만 릴리스됩니다. [NSData dataWithContentsOfURL :]에서 반환 된 개체는 자동으로 해제되거나 가비지 수집됩니다. – dreamlax

+0

가비지 컬렉션이없는 iPhone에서도! –

+0

가비지 수집되지 않은 환경에서 객체는 자동 회수 풀에 추가되며 다음 이벤트 루프에서 할당 해제되거나 풀 자체가 할당 해제 될 가능성이 있습니다. 어쨌든, 반환 된 객체를 "소유"하지 않으므로 내가 의미하는 바를 아는 경우 릴리스하지 않아도됩니다. + alloc, -copy 또는 -mutableCopy (및 다른 것)를 통해 명시 적으로 할당 한 객체 만 소유합니다. – dreamlax

답변

5

은 그냥 C에서와 같은 :

[self _loadData:(const char *)buffer]; 

작동합니다.

+0

고마워! 다른 유형의 버퍼를 할당하려고 시도했는데 "포인터는 포인터 일뿐입니다." const char * charBuff = 버퍼; 그것을 던지려고 생각하지 마십시오. 하아! –

+0

"const char * charBuff = (const char *) buffer; (char * 변수에 할당하면 캐스팅이 필요함) – duncanwilcox

3

명시 적으로 할당하지 않았으므로 데이터 개체를 해제하면 안됩니다. 또한 간단한 캐스트를 할 수 있습니다.

[self _loadData:(const char *) buffer]; 
+0

NSData를 잘 잡을 수 있습니다. 메모리에 대해 더 자세히 알아야합니다. 감사합니다! –