2017-02-24 6 views
0

나는 내가 다음과 같이로 부르는 C의 API가 있습니다[bytes]는 사용하지 않아도 자동으로 메모리를 해제합니까?

- (NSData*)getFileContents { 
    NSData *fileContents; 

    //do something 

    return fileContents; 
} 

-(void*) manipulateFile { 
    UInt8 *data = (UInt8*) [[self getFileContents] bytes]; 
    UInt32 dataLength = (UInt32)[[self getFileContents] length]; 

    //call some C API with the data and dataLength value   

을}

지금은 명시 적으로 내가 bytes 전화의 후드 아래에 무슨 일이 일어나고 있는지 궁금 free(data)를 호출 할 필요가 없습니다으로 내 질문에

답변

1

자신에게 물어보십시오 - 명시 적으로 malloc 님과 친구에게 전화를 했습니까? NSData bytes에 대한 설명서에서 포인터 소유권이 호출자에게 전달된다고 명시되어 있습니까?

대답은 두 가지 질문에 모두 아니오이므로 아니오, 당신은 free으로 전화하지 않아도됩니다.

큰 관심사는 포인터의 유효 기간입니다. NSData 개체의 수명이 지난 후에는 사용하지 마십시오.

+0

나는 내 프로그램이 추락했을 때 (하하) 많이 생각했다. 나는 이것이 그 이유와 후드에서 일어나는 일이 왜 궁금합니다. 죄송합니다. 명확해야합니다. – ExceptionHandler

+1

'bytes' 속성이 NSData 인스턴스가 소유 한 포인터를 전달하고 있습니다. NSData 인스턴스는 해당 메모리를 소유합니다. 책임이 있습니다. 그것은 당신에게 복사본을 제공하지 않습니다. 따라서 포인터를 소유하지 않으므로 포인터를 비우면 안됩니다. – rmaddy