我对核心基础编程非常陌生,想知道我考虑的是否正确。我正在使用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_;
}
__bridge_transfer
转换(或CFBridgingRelease
)让ARC为你释放它。如果你从Cocoa或Cocoa Touch函数或方法中获取它,它就在Objective-C领域,因此由ARC管理。你可以使用__bridge_retained
转换(或CFBridgingRetain
)将其转移到CF世界,之后你必须使用CFRelease
释放它(或将其转回ARC)。 - Peter Hosey