簡體   English   中英

iPhone如何使用ARC正確處理Core Foundation引用?

[英]iPhone how to properly handle Core Foundation references with ARC?

我對核心基礎編程非常陌生,想知道我在想什么是正確的。 我正在使用ARC,並且不確定它如何處理非對象引用。 我需要保存對示例緩沖區的引用,稍后在應用程序中使用它。 這是可能的,還是樣本緩沖區會在此之前解除分配?

將使用self.sampleBuffer = sampleBuffer_; 導致內存泄漏? 此次通話后是否需要添加手動呼叫才能發布?

@property (nonatomic)CMSampleBufferRef sampleBuffer;

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer_ fromConnection:(AVCaptureConnection *)connection
{
    //does this cause memory leak?
    self.sampleBuffer = sampleBuffer_;
}

它不會導致內存泄漏。 實際上,您更有可能遇到從您下面釋放的對象的問題,因為默認情況下屬性具有assign屬性,這意味着它們不保留(讀取:擁有)已分配的對象。

如果您持有足夠長的樣本緩沖區以使其成為屬性,則應該按照文檔將樣本復制到您自己的緩沖區,而不是保留傳遞給您的委托的對象:

如果您的應用程序通過保留提供的CMSampleBuffer對象太長時間而導致刪除樣本,但它需要長時間訪問樣本數據,請考慮將數據復制到新緩沖區中,然后釋放樣本緩沖區(如果它以前保留過)以便它引用的內存可以重用。

另一方面,如果你真的想保留對樣本緩沖區的引用,你可以保留其他所有內容,並在將它分配給你的屬性之前在對象上調用CFRetain (確保你CFRelease之前分配的對象) )。 這與Foundation對象的strong屬性具有等效的語義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM