AVAssetWriter内容泄漏

问题描述

| 你好,我是ios开发的新手,我遇到了一些问题 我做一些像对象一样的AVAssetWriter设置(我用它来写pixelmaps 作为视频帧-可以正常工作)
    self.assetWriter = [[AVAssetWriter alloc] initWithURL:outputPath fileType:AVFileTypeQuickTimeMovie error:&error];

    NSMutableDictionary *dic=[[NSMutableDictionary alloc] init];
    [dic setValue: AVVideoCodecH264 forKey: AVVideoCodecKey];
    [dic setValue:[NSNumber numberWithInt:640] forKey:AVVideoWidthKey];
    [dic setValue:[NSNumber numberWithInt:480] forKey:AVVideoHeightKey];
     self.assetWriterInput = [[AVAssetWriterInput alloc] initWithMediaType:AVMediaTypeVideo outputSettings:dic];
      [dic release];

    assetWriterInputPixelBufferAdaptor =[[AVAssetWriterInputPixelBufferAdaptor alloc] initWithAssetWriterInput:assetWriterInput sourcePixelBufferAttributes:nil];

    self.assetWriterInput.expectsMediaDataInRealTime=YES;
    [self.assetWriter addInput:assetWriterInput];

    [self.assetWriter startWriting];
    [self.assetWriter startSessionAtSourceTime:recordStartTime];
然后在它之后我保存视频,然后在它之后释放实例
[self.assetWriterInput markAsFinished];
[self.assetWriter endSessionAtSourceTime:recordStartTime];
[self.assetWriter finishWriting];

CVPixelBufferPoolRelease(assetWriterInputPixelBufferAdaptor.pixelBufferPool);
[self.assetWriter release];
[self.assetWriterInput release];
[self.assetWriterInputPixelBufferAdaptor release];
麻烦的是,当我多次使用上述一对乐器创建并释放实例以保存一些视频时,乐器向我显示泄漏 救命!     

解决方法

        
AVAssetWriter *newWriter = [AVAssetWriter alloc] // retain count is 1. 
self.assetWriter = newWriter // What this actually does:

- (void)setAssetWriter(AVAssetWriter*)newWriter
{
    if (_assetWriter != newWriter)
    {
        [_assetWriter release]
        _assetWriter = [newWriter retain]; //retain count 2
    }
}

[self.assetWriter release]; //retain count 1
如果您忘记添加self.assetWriter = nil;取消分配,最终会泄漏。在[分配实例]并通过@properties分配实例时,将自动释放附加到分配行,如下所示:
self.assetWriter = [[[AVAssetWriter alloc] initWithURL:outputPath fileType:AVFileTypeQuickTimeMovie error:&error] autorelease];