我对核心基础编程非常陌生,想知道我在做什么是正确的。我正在使用ARC,我不确定它如何处理非对象引用。我需要保存对示例缓冲区的引用,并稍后在应用程序中使用它。这是可能的,还是将样本缓冲区在此之前解除分配?iPhone如何正确处理与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_;
}
要明确,ARC对Core Foundation对象无任何影响。它不会尝试自动管理它们,因此您需要[手动管理](https://developer.apple.com/library/mac/#documentation/CoreFOundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html)。一些CF类型可以免费桥接到Cocoa类型。因为ARC *管理可可物体,所以你必须小心地在这些世界之间搭桥。 – 2012-04-27 03:37:40
......这听起来不那么难。如果你从CF功能(包括CG等)获得它,它在CF-land中,因此不由ARC管理。你可以让ARC用'__bridge_transfer' cast(或'CFBridgingRelease')为你发布它。如果您从Cocoa或Cocoa Touch功能或方法获得它,则它位于Objective-C-land中,因此由ARC进行管理。你可以用'__bridge_retained' cast(或'CFBridgingRetain')将它传递给CF世界,之后你需要'CFRelease'(或者将它传回ARC)。 – 2012-04-27 03:54:27
感谢您的澄清! – 2012-04-27 11:52:18