2017-02-24 28 views
0

我有一個C API我打電話到如下:[字節]是否自動釋放內存而不必使用免費?

- (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   

}

現在我的,因爲我沒有顯式調用free(data)我想知道什麼是bytes調用的引擎蓋下發生的問題

回答

1

問問你自己 - 你明確地打電話給malloc和朋友嗎? NSData bytes的文檔是否聲明指針的所有權傳遞給調用者?

由於兩個問題的答案都是否定的,所以不,您不(不得)撥打free

您最關心的是指針的有效生存期。請勿嘗試在NSData對象的整個生命週期內使用它。

+0

當我的程序崩潰時(哈哈),我的想法很多。我只是想知道爲什麼是這樣的情況以及發生了什麼。對不起應該已經清楚 – ExceptionHandler

+1

'bytes'屬性傳遞給你一個由'NSData'實例擁有的指針。 'NSData'實例擁有那個內存。它負責它。它沒有給你一個副本。因此,既然你不擁有指針,你就不能釋放它。 – rmaddy

相關問題